Задать вопрос
Ответы пользователя по тегу Java
  • Как собрать java проект на maven в jar файл и поставить на ubuntu server 18.04?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Можно по-разному задеплоить приложение.
    Один из возможных способов это docker или docker-compose.
    Шаги:
    1 - создать Dockerfile, указать как проект должен быть собран, что нужно установить и т.д.
    Например,
    FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine as build
    COPY . /srv
    RUN cd /srv && chmod +x mvnw && ./mvnw clean package
    FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine
    WORKDIR /srv
    COPY --from=build /srv/target/{JAR_NAME}.jar /srv/{JAR_NAME}.jar
    ENTRYPOINT exec java -jar /srv/{JAR_NAME}.jar

    2 - залить проект на гит
    3 - сделать git clone этого проекта на удаленный сервер.
    4 - запустить docker или docker-compose

    Другое более простое решение:
    1 - собрать архив при помощи maven
    mvn clean package
    2 - Полученный архив из директории target/(JAR_NAME).jar закинуть по scp на сервер.
    3 - Установить jre соответствующей версии и запустить проект.
    java -jar /srv/{JAR_NAME}.jar
    Ответ написан
    Комментировать
  • Как поставить телеграм бота java на windows server?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну по-первых, сервер на Windows - плохой выбор. Рекомендую использовать Linux.
    Во-вторых, хоть сервер на Windows, хоть на Linux, а работать придется через терминал (консоль). Необходимо подключиться по ssh и установить jdk и т.д. В данном случае GUI (графическая оболочка) вам не нужна.
    В-третьих, если нужен относительно дешевый vps на linux, то hetzner неплохой.

    Теперь, по существу вопроса:
    1) вам нужна программа для работы с ssh.
    Например, xShell - https://www.netsarang.com/ru/xshell/
    Скачать / установить.
    2) Подключиться к серверу по ssh
    Ввести хост, логин, пароль, порт (возможно, пуб. ключ и т.д.)
    3) Установите Java
    https://www.java.com/en/download/help/silent_insta...
    https://stackoverflow.com/questions/51112065/how-t...
    4) Перекиньте ваш проект на сервер и запустите.
    Ответ написан
    Комментировать
  • Меняют ли аннотации данные в коде?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В первую очередь, наверное, стоит обратить внимание на это:
    Аннотации представляют собой некие метаданные, которые могут добавлятся в исходный код программы и семантически не влияют на нее, но могут использоваться в процессе анализа кода, компиляции и даже во время выполнения.

    Далее обратите внимание на RetentionPolicy:

    RetentionPolicy.SOURCE - аннотация используется на этапе компиляции и должна отбрасываться компилятором;
    RetentionPolicy.CLASS - аннтоация будет записана в class-файл компилятором, но не должна быть доступна во время выполнения (runtime);
    RetentionPolicy.RUNTIME - аннотация будет записана в class-файл и доступна во время выполнения через reflection.


    Чтобы аннотация "заработала" нужен так называемый Analyzer (Processor)
    Вот, пример процессора:
    https://www.baeldung.com/java-annotation-processin...
    https://thetechstack.net/how-to-process-annotation...
    https://cloudogu.com/en/blog/Java-Annotation-Proce...

    @SQLString(30) String firstName;
    Процессор при помощи рефлексии получит доступ к экземпляру данного класса, затем прочитав данные указанные в аннотации создаст соответсвующую таблицу с соответствующими колонками согласно указанным аннотациям
    Ответ написан
    Комментировать
  • Как отправить запрос в виде url и в ответ получить xml?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    URL на который вы обращаетесь, я так понимаю, что это сторонний сервис? И вы хотите по API обратиться из Spring'a на этот сервис и полученный ответ в xml прочитать и что-то с ним сделать?
    Прочитайте про RestTemplate
    https://www.baeldung.com/rest-template
    Это для отправки запроса на сторонний сервис.

    Вот, пример того, как получить xml и распарсить его в pojo -
    https://stackoverflow.com/questions/36124081/sprin...
    Ответ написан
    Комментировать
  • Не удалось развернуть проект на heroku?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Дополню ответ Dmitry Roo
    Тут указано, что по дефолту используется OpenJDK 8
    https://devcenter.heroku.com/articles/java-support...
    Heroku currently uses OpenJDK 8 to run your application by default.


    Heroku currently uses OpenJDK 8 to run your application by default. OpenJDK versions 17, 15, 13, 11, and 7 are also available. Depending on the major version you select the latest available update of that JDK will be used each time you deploy your app.
    
    Current default versions are:
    
        Java 7 - 1.7.0_332
        Java 8 - 1.8.0_322
        Java 11 - 11.0.14
        Java 13 - 13.0.10
        Java 15 - 15.0.6
        Java 17 - 17.0.2


    Прочитайте главу Specifying a Java version по ссылке выше, чтобы понять, как сменить версию
    Ответ написан
    1 комментарий
  • Пример кода: таблица с фильтрацией с использованием Thymeleaf и Spring ( можно Boot ), как найти?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну тут стоит обратить внимание на 2 варианта реализации:
    1) фильтрация / сортировка на стороне клиента средствами js. Т.е. с сервера отдаются данные, а затем уже эти данные сортируются на стороне клиента
    2) фильтрация / сортировка на стороне сервера. А данные уже отдаются в отсортированном виде

    Сортировку и фильтрация на клиентской стороне можно достичь средствами js.
    Вот, готовый продукт:
    Data Tables -
    сортировка - https://datatables.net/examples/basic_init/table_s...
    фильтрация - https://datatables.net/extensions/fixedheader/exam...
    Если нужна серверная фильтрация и сортировка в DataTables, то:
    https://datatables.net/examples/data_sources/serve...

    А вот, готовая либа для Spring, чтобы работать с DataTables. Фильтрация также поддерживается:
    https://github.com/darrachequesne/spring-data-jpa-...

    Вот, кастомный пример сортировка средствами js
    простое нажатие на хедер таблицы

    https://bootsnipp.com/snippets/1erEV

    Теперь, что касается фильтрации и сортировки на серверной стороне средстваами самого Spring:
    https://www.bezkoder.com/spring-boot-pagination-so...
    https://www.baeldung.com/spring-data-jpa-paginatio...

    P.S. у разработчика bezkoder (ссылка выше), также есть страница на гитхаб, где предложены исходники проектов
    Ответ написан
    Комментировать
  • Thymeleaf, как добавить значение по умолчанию для параметра, если он отсутствует при нажатии на ссылку?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Thymeleaf, как добавить значение по умолчанию для параметра, если он отсутствует при нажатии на ссылку?

    Никак. thymeleaf есть на стороне сервера. А нажатие на ссылку происходит на стороне клиента (в браузере), где нет никакого thymeleaf.
    Соответственно, вам нужно валидировать средствами js || jQuery.
    Условно говоря, вещаете обработчик на клик по ссылке
    Погуглите jQuery .on('click', function(){}) или .click()
    Если нет нужного параметра, то средствами js добавляете его и все.
    Ответ написан
    1 комментарий
  • Как исправить ошибку "no main manifest attribute"?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Могу предположить проблемы в самом файле manifest:
    В файле MANIFEST.mf или Manifest.txt нет переноса строки. Из-за чего он игнорирует ваш файл. Убедиться в этом можно, если открыть jar каким-нибудь архиватором и заглянуть в директорию MANIFEST/MANIFEST.mf
    Вот, простой рабочий пример:

    Структура директорий и файлов:
    folder/package1/Dime2.java
    folder/package1/Dime2.class
    folder/MANIFEST.mf


    Выполненные команды:
    Компилируем в байт-код
    javac Dime2.java

    Создаем архив
    jar cfm dime.jar MANIFEST.mf package1/*.class

    Содержимое файла MANIFEST.mf (не забываем про перенос строки)
    Main-Class: package1.Dime2

    Содержимое файла Dime2.jar
    package package1;
    
    public class Dime2{
        public static void main(String [] args){
            try{
                System.out.println("Hello world");
                Thread.sleep(10000);
            } catch(Exception exc){}
        }
    }


    P.S. Обратите внимание на некоторых ОС необходимо дать права на запуск jar файла.
    Например, в linux
    chmod a+x dime.jar

    Ну и запускаем jar'ник
    java -jar dime.jar

    P.S. В примере я показал MANIFEST.mf, но без разницы. Можно и txt использовать
    Ответ написан
    1 комментарий
  • Thymeleaf, th:text не работает, если находится внутри другого th:text, как обойти?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если память не изменяет, то вам нужен th:inline
    Примерно так:
    <h4 th:inline="text">[[${product.name}]]<span th:text="${product.getPrice()}">45</span></h4>

    Вот, прочитайте этот вопрос:
    https://stackoverflow.com/questions/25071985/thyme...
    Ответ написан
    Комментировать
  • Почему Bad Request, status=400 при загрузке файлов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Ваш инпут называется images
    <input type="file" name="images" multiple class="form-control" accept=".jpg, .jpeg" >


    В контроллере вы ожидаете files
    @RequestParam("files") MultipartFile[] images
    Ответ написан
    Комментировать
  • Стоит ли использовать разные DTO для Response и Creation объекта?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Зависит от проекта, но на мой взгляд хорошей практикой является создание разных DTO.
    Например,
    UserCreationDto
    UserUpdateDto
    Ответ написан
    Комментировать
  • На что стоит обратить внимание при изучении back-end'a на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Изучите Spring Boot (Spring Framework). Научитесь писать как простые, так и сложные проекты. Там есть отдельна экосистема Spring Cloud и т.д., которые позволяют разрабатывать еще более сложные сервисы.
    Ответ написан
    4 комментария
  • Не могу отправить сообщение на почту Java Mail - Bad type on operand stack?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    smtp.gmail.ru
    в этом уверены?
    скорее:
    smtp.gmail.com

    Вы письмо сами себе отправляете?
    message.setFrom(new InternetAddress("maksimovm117@gmail.com"));
                message.setRecipient(Message.RecipientType.TO, new InternetAddress("maksimovm117@gmail.com"));


    https://support.google.com/mail/answer/7126229?hl=...
    smtp.gmail.com
    
    Требуется SSL: да
    
    Требуется TLS: да (при наличии)
    
    Требуется аутентификация: да
    
    Порт для SSL: 465
    
    Порт для TLS/STARTTLS: 587
    Ответ написан
  • Как обратиться к обьекту с другого класа?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Объект kub располагается в области видимости метода main. Получить доступ из другого класса к этому объекту нельзя.

    как мне обратиться к этому обьекту из другого класа?

    Какого результата вы хотите добиться этим?

    Поделюсь своим мнением по поводу самого кода:
    Так как ваш класс Circle является pojo, то располагать метод main в нем некорректно.
    Создайте другой класс и закиньте метод main туда.
    Т.е. должно получиться так:
    псевдокод

    class Circle extends Shape {}
    class Triangle extends Shape {}
    public class Main { void main() }

    Если следовать вашему коду, то получится так:
    class Circle extends Shape { void main() }
    class Triangle extends Shape { void main() }
    т.е. каждый pojo класс должен содержать точку входа, что странно...
    И еще один совет, осознанно давайте названия переменным, классам, методам. 
    А то <code>Circle kub</code> (Круг квадрат) ну сами понимаете.
    Ответ написан
  • Индексация массива Java. Как обойтись без циклов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Будь я на вашем месте сделал бы следующим образом:
    Создал бы метод, который принимает несколько аргументов:
    1) сам массив, по которому нужно итерировать
    2) startOffset - это если нужно вывести char без первых n символов
    3) endOffset - это если нужно вывести char без последних n символов

    Либо же можно реализовать подобное при помощи Stream API. Но скорее всего вы все еще изучаете Java и скорее всего еще не дошли до этого...
    Ответ написан
    1 комментарий
  • Что это значит в джаве?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    У одного интерфейса могут быть несколько реализаций.
    Animal - это интерфейс.
    Соответственно, есть разные реализации. Например,
    interface Animal {}
    class Dog implements Animal {}
    class Cat implements Animal {}


    Вот, представьте следующую ситуацию. Вам необходимо написать либу для работы с БД. Притом БД могут быть разные. Это может быть и MySQL, PostgreSQL, SQLite и т.д.
    Но у них у всех (независимо от БД) есть некие общие методы. Например, connect() & disconnect()
    Тогда создается некий интерфейс Connection
    inteface Connection {
    connect(){}
    disconnect{}
    }

    Дальше создаются классы. Например,
    class MySQLConnection implements Connection {}
    class PostgreSQL implements Connection {}

    и т.д.
    в которых методы connect() & disconnect() реализуются.

    Ну а дальше чтобы подключиться например к БД MySQL используют
    Connection c = new MySQLConnection();
    c.connect();

    Если завтра попросят подключиться к другой БД, то поменяется только new MySQLConnection();
    Ответ написан
    Комментировать
  • Spring Boot, таблица с сортировкой, фильтрацией, пагинацией, как это реализовать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я только учусь и просьба быть терпимым к такому тупому вопросу:(

    Нормальный вопрос)
    Нашел вариант только с DataTables CDN, но там не происходит обращение к БД

    Ну во-первых, именно Datatables я вам и посоветую.
    А во-вторых, если хорошо глянуть в документацию, то найдете
    https://datatables.net/manual/server-side
    https://datatables.net/examples/data_sources/serve...
    В примере во второй ссылке показана пагинация с обращением на сервер
    Ну и конечно же готовая либа для Spring Boot для работы с DataTables
    https://github.com/darrachequesne/spring-data-jpa-...
    Ответ написан
    1 комментарий
  • Как исправить error: cannot find symbol?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день
    Там же черным по белому написано, что он не может найти символ num
    System.out.println("Amoeba №: " + num + ":");
    Переменная у вас объявлена внутри публичного класса и недоступна в самом методе.
    int num = Amount;
    Прочитайте про область видимости переменной
    Ответ написан
    6 комментариев
  • Почему я получаю эксепшн ArrayIndexOutOfBoundsException?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    v_vladik,
    Этот вариант исключается. Я точно уверен, что в файле разделитель присутствует.

    Учтите еще одно, что дефис и тире разные символы.
    Например, https://www.compart.com/en/unicode/category/Pd
    Что если у вас например, тире, вместо дефиса или еще что...

    Не лучше ли вместо того, чтобы плодить кучу методов (получить первую строку, получить вторую, третью, четвертую и т.д. ), создать метод, который принимает строку и номер строки, которую нужно получить? Соответственно, будет один метод.
    public static String getFirstLine(String line) {
            String[] lines = line.split("-");
            return lines[0];
        }
        public static String getSecondLine(String line) {
            String[] lines = line.split("-");
            return lines[1];
        }


    english.txt

    Было бы неплохо увидеть пример содержимого файла.

    И еще вполне возможно, что у вас тут проблема:
    for (int i = 0; i < size; i++) {
                words.add(getFirstLine(list.get(i)));
                translation.add(getSecondLine(list.get(i)));
            }


    А чего гадать-то? Сделайте дебаг и гляньте что именно ему не нравится
    Ответ написан
    Комментировать
  • Как быстро нарисовать график?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вам необходимо воспользоваться возможностями GUI библиотек. Например, swing
    https://stackoverflow.com/questions/8693342/drawin...
    www.java2s.com/Code/Java/Advanced-Graphics/DrawMat...
    В общем, как-то так...
    Ответ написан
    Комментировать