Ответы пользователя по тегу Java
  • Можно ли в одном проекте создать несколько выполняемых или jar файлов?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Значит смотри. Что такое несколько выполняемых файлов. Это просто несколько jar-файлов в которых просто есть нужный манифест. Я достигал это с помощью профилей и с помощью Makefile который уже автоматизировал сборку проекта. Вот пример проекта с двумя main артифактами. Приведу только ключевые фрагменты которые есть суть.

    pom.xml
    <profiles>
        <profile>
          <id>java</id>
          <properties>
            <main.class.name>org.example.JavaTemplate</main.class.name>
            <jar.name>java-template</jar.name>
          </properties>
        </profile>
        <profile>
          <id>java-kafka-producer</id>
          <properties>
            <main.class.name>org.example.kafka.JavaKafkaProducerTemplate</main.class.name>
            <jar.name>java-kafka-producer-template</jar.name>
          </properties>
        </profile>
       ....
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                  <Main-Class>${main.class.name}</Main-Class>
                </manifest>
              </archive>
              <finalName>${jar.name}</finalName>
            </configuration>
          </plugin>

    Makefile
    java-kafka-producer-template: build
    	mvn package -DskipTests -Pjava-kafka-producer
    	cp -f target/java-kafka-producer-template.jar ./bin/
    
    build: clean
    	mvn install dependency:copy-dependencies
    	cp -f target/dependency/* ./bin/
    	rsync src/main/resources/shell/* ./bin
    
    clean:
    	rm -fr bin/*
    	mkdir -p bin/
    ...


    Сразу скажу что я не искал коробочного решения в виде готового gradle/maven плагина. Я просто скриптовал последовательность действий для нескольких сборок. Фактически я делал несколько компилляций проекта с разными параметрами. Я думаю что я достиг своей цели не заморачиваясь java-перфекционизмом или зависимостью от IDE.
    Ответ написан
    Комментировать
  • Можно ли собрать apk используя тоьько jdk?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Дело в том что Google использует свою jvm бинарно не совместимую с Sun/Oracle jvm.
    Поэтому я могу спорить на виски что не взлетит никак.
    Ответ написан
    Комментировать
  • Возможно ли на java сделать микросервис, который бы генерировал xls со сложной структурой и использовать его через api?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вопрос состоит из двух частей.

    1) Можно ли на java сделать микросервис? Ответ - да. Есть много готовых шаблонов типа Spring-REST
    которые являют собой почти готовые микро-сервисы.

    Например https://start.spring.io/;

    2) Генерировать XLS со сложной структурой. Тут не знаю. Насколько сложной? Что там? Вся база знаний о планете Земля со времен Шумеров? Ну для работы с XLS есть библитечка apache poi

    https://poi.apache.org/
    Ответ написан
    4 комментария
  • No main manifest attribute как исправить данную ошибку?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты издеваешся такие имена для артифактов создавать?
    1.7.10.jar
    Вот как понять какой артифакт ты собрал? КЛиент? Сервер?

    Добавь main class к нужному артифакту по шаблону.
    <attribute name="Main-Class" value="your.main.class.is.Here"/>
    Ответ написан
  • Ошибка возникающая при сборке maven проекта. Какую версию Java необходимо указать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вот так надо.

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
      </properties>
    
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
    Ответ написан
    Комментировать
  • Как получить результат из exec с русскими символами?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Точного ответа на твой вопрос сразу нельзя дать. Потому - что тут идет экспертное дерево вопросов и ответов.
    Непонятно где ты запускаешь. В среде разработки или в консоли.

    Попробуй сначала в консоли сделать так.

    C:\>chcp 866
    Active code page: 866

    Запустить приложение.

    И потом еще так.
    C:\>chcp 1251
    Active code page: 1251
    Ответ написан
    4 комментария
  • Почему в Kotlin (а может и в Java) так много методов?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В Java мне часто не хватает некоторых методов для работы со строками и я подключаю commons-lang3. Кажется там есть всякие расширенные опции поиска и замены. И что характерно там не нужен формат регулярки. А просто можно строку заменять на строку. Я давно ничего не делал в Котлине и не знаю как там щас. Но мне кажется что они пошли по пути очень быстрой эволюции языка. Я не знаю хорошо это или плохо. Как мне кажется это всегда плохо
    для изучающих язык. Язык богатый фичами языка - всегда будет сложен в разборе поведения. Яркий пример - неопределенное поведение в некоторых языках. Целые статьи на эту тему пишут. Чтоб объяснить почему инкременты с присвоениями конфликтуют в одном выржаении.

    И вообще найти баланс между ядром языка и библиотеками - это большое искусство. Я в данном случае - за простоту языка.
    Ответ написан
    2 комментария
  • Как удалить ненужные версии JDK?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не знаю откуда вы сформировали такой отчет.

    С точки зрения современной ОС вы можете хранить много конфигураций JDK/JRE и перключаться между ними просто изменяя PATH/CLASSPATH. Это работает для Linux в основном. Для Windows мне это не удавалось. По крайней мере был еще один способ конфигурирования путей доступа к библиотекам который я на тот момент не знал. Возможно через реестр.

    Чтобы удалить ненужный - нужно знать какие вам нужны. Я-бы оставил только 17 поскольку она LTS (Long Term Support) а все остальные бы удалил если нет других требований.

    Из оставшихся двух версия corretto - разрабатывается и поставляется амазоном на его виртуалки. Поэтому если хостинг покупаете в амазоне то имеет смыл и ее использовать. Но я не вижу JDK это или JRE. Для процесса разработки софта (компилляции) нужна только JDK.
    Ответ написан
    2 комментария
  • Почему не выводится объект через сторонний класс?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Здесь создается новый экземпляр
    NameFind nameFind = new NameFind();
    который еще ничего не знает про "qqq"
    Ответ написан
  • Android studui после обновления testImplementation 'junit:junit:4.13.2' не импортируется класс HdrImageCaptureExtender. Как исправить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    По сегодняшним меркам технологии устарели. Так автор ставит
    testImplementation 'junit:junit:4.+'

    Каким сегодняшним меркам? Да эти зависимости еще 20 лет будут работать. Ты разобрался как знак "+" работает
    в данном контексте? Поставь конкретную версию junit (старую!) с которой все работало раньше и пускай так себе
    работает. А то у тебя как в анекдоте "лапы вытянул - хвост увяз".
    Ответ написан
  • Почему иногда выходит ошибка java.awt.HeadlessException: null?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Headless - это специальный релиз Java который ставится на сервера где никогда не будет подключенного
    монитора. Виртуалки. Фиксится это наверное установкой правильног десктопного релиза на десктоп
    где все графические библитеки в наличии.

    Почему у тебя что-то рандомно выскакивает - это вопрос.
    Ответ написан
    Комментировать
  • Как повторить curl запрос в java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Трудно сказать где ты ошибся. Наверное ты формируешь другой запрос отличный от culr-шаблона.

    Попробуй понаблюдать сетевой трафик через tcpdump/wireshark.

    И попробуй активировать DEBUG логгирование для библиотеки org.apache.hc.client5 (я думаю что ты ее используешь хотя по исходнику неочевидно). Попробуй в отладке посмотреть на MultipartEntityBuilder. Есть ли у него toString() ? И что там?
    Ответ написан
    Комментировать
  • Почему SpringBoot не видит ни одного моего бина?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А попробуй так

    System.out.println(applicationContext.getBean(ConnectionPool.class));
    Ответ написан
    4 комментария
  • Почему не собиратеся сборка gradle?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Он же тебе предлагает запустить с --debug опцией. Запускай. Смотри. Сетевая ошибка может быть.
    Ответ написан
  • Error: unmappable character for encoding Cp1251 как исправить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    У тебя где-то идет преобразование из Unicode символов в символы кодировки cp1251 (только латиница и кириллица) и если попадается символ который ни то и не другое - то кодировщик не может его преобразовать. Решение - найти в конфигурации где у тебя идет использование cp1251 и заменить его на utf-8 или utf-16.
    Ответ написан
    Комментировать
  • Как превратить подстроку вида "min ( a, b )" в "a min b"?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Поскольку случай - очень простой, то он решается шаблоном. Но если вместо а или б может быть
    тоже выражение - тогда нужно определять свою грамматику. Например:
    min ( min(a,b) , min (c,d) )
    Тогда умные дядьки-теоретики берут язык описания грамматик. EBNF типа. И пытаются
    свой новояз описать в терминах например EBNF https://en.wikipedia.org/wiki/Extended_Backus%E2%8...
    Описывают что такое число. Какое оно. Отрицательное? Вещественное? Экспоентциальное?
    Короче надо описать вообще все что может быть. Описывают функцию минимума.
    Потом по этой грамматике создают парсер. Программно. И парсер на выходе выдает
    дерево. Где корень - это вся грамматика а на листиках будут висеть числа. Или терминалки не помню
    как они это называют. И вот когда ты уже получил это чортово дерево - можно ПРИСТУПАТЬ ко второй
    части задачи - а именно к транформации в инфиксную форму. Но ты сначала реализуй хотя-бы первую
    часть.

    Это все теория и она требует погружения. Я думаю что эта задача и ей подобные в частных случаях
    решаются проще. Если например твой язык поддерживает регулярки - то перечисли макс. число
    вариантов что будут на входе и выбери через матчинг подходящий. Это - быстрее.
    Ответ написан
    Комментировать
  • Это синтаксический сахар или есть какая-то существенная разница?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В Java Language Spec - Глава 10.2 https://docs.oracle.com/javase/specs/jls/se19/jls19.pdf
    Ответ написан
    Комментировать
  • Для чего нужна Java, что можно на ней конкретно написать и стоит ли вообще ее учить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Согласно рейтингам tiobe и renmonk Java стабильно кувыркается где-то на 4 месте в рейтинге популярных языков разработки. Рейтинг Редмонка собирается из двух рейтов популярности (кажется количество вопросов в стековер и количество проектов на гитхабе. Ну или может как-то сложнее ХЗ).

    Первым трем местам в этом анализе я-бы не сильно доверял. Там постоянно идет ротация то JavaScript выскакиевает то C то Swift но ситуация каждый год - новая. Вот сейчас там висит Python... Наверное девопсы подсуетились. И сайентисты.

    В чем сила Java сегодня? Ну во первых в большом объеме легаси кода который уже написан и работает. Java сегодня занимает нишу COBOL в банках и финансовых организациях. И если вы хотите средний достаток, (машина дом, vacation) - то идите спокойно в java и будет кусок хлеба.

    Во вторых в толстом репозитарии бесплатных библиотек на все случаи жизни.
    Например я уже 2 года не пишу на Java ничего ради денег. Но в некоторых скриптах на Scala/Databricks я спокойно подключаю Java-библиотекие (всякие sftp клиенты, json/xml парсеры) и все это нормально интегрируется и работает. И слоган про wrote-once - это не шутка. Это правда работает и в доказательство - целый репозитарий таких либ на mvnrepository.com. Они будут совместимы c Kotlin/Groovy/Scala короче со всеми JVM-based языками.

    Лично я считаю Java как язык слишком многословным. Многие вещи можно короче запрограммировать. Но это просто моё ИМХО. При игры - ничего не скажу. Не знаю. Но вот на Kotlin что-то пишут под Андроид.

    И вообще программист должен больше выбирать род деятельности (фронт или back или железо и микро-контроллеры) а языки учить всю жизнь. Вот так. Вы всю жизнь - студент.
    Ответ написан
    4 комментария
  • Как получить список всех классов во время выполнения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Как-то мне надо-было посмотреть какие зависимости использует реал-тайм одного бизнес-процесса.

    Я запускал логгирование действий класслоадера. И потом анализировал лог.

    $ java -verbose:class -jar application-1.0.jar
    Ответ написан
    5 комментариев
  • Какая из книг лучшая для изучения java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    подскажите одну книгу,которую буду читать и не жалеть о том что теряю время в пустую

    Просьба очень странная. Даже невозможно нормального ответить.
    Авторов обычно трое. Шилдт. Эккель. И Хорстман. Все пишут про Java. Примерно
    одно и тоже. Но поскольку ты очень занятой и тебе времени не хватает - то я тебе
    не советую читать ничего. Работай и задавай вопросы здесь. Когда появится желание
    читать - выбери жестко одну тему. Например рефлексия. И читай только про нее.
    Вот так.
    Ответ написан
    1 комментарий