|
Модераторы: LSD, AntonSaburov |
|
NZero |
|
|||
Опытный Профиль Группа: Участник Сообщений: 358 Регистрация: 28.4.2010 Где: Москва Репутация: нет Всего: нет |
Всем привет!
Пытаюсь собрать Maven в jar файл средствами Intellij Idea. В интернете пишут, что нужно всего лишь сделать структуру pom.xml файла нужную и всё заработает. У меня pom.xml получился следующий:
При сборке никак не хочет появляться jar файл в директории target. В чём ошибка? |
|||
|
||||
Се ля ви |
|
||||||||||||||||
Java/SOAрхитектор Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Во-первых, idea тут не при чём, собирать нужно в командной строке самим maven'ом примерно так:
Во-вторых, mainClass должен быть в пакете, и с пакетом же должен быть указан в теге <mainClass> В-третьих, все версии нужно выносить в секцию properties, а в самих зависимостях - на них ссылаться, иначе не будет работать чрезвычайно удобный maven-version plugin В-четвёртых, groupID обычно именуется так же как пакеты - от сайтов с перестановкой домена первого и второго уровня, а такой groupId - TestITPhoneClient - я бы сказал, весьма диковат... В-пятых, почитай про принцип "Convention Over Configuration", то что по умолчанию итак работает - писать не надо. В частности, тег packaging итак по умолчанию имеет значение jar в super-POM'е - так что не нужно его указывать вообще, это - тавтология. То же самое относится к maven'овским plugin'ам. Если значение groupId
, то его так же можно не писать. В-шестых, всё по тому же принипу CoC, ты не указал версию Java'ы, так что (для maven-plugin'а 3.8.1) получишь Java'у то ли 1.6, то ли 1.7 - тебя это точно устроит? Может, лучше указать явно? В-седьмых, ты не используешь никакого BOM'а, да и по ходу на чистой Java'е собрался писать - без Lombok'а и Manifold'а, не используешь библиотеку Vavr, а для тестов - морально-устаревший JUnit 4 без assertJ - на голом Hamcrest'е и без mock'ов... ну смотри, по-моему так писать - сплошное мучение... В-восьмых, зависимость
имеет проблемы - транзитивно она тянет за собой зависимость
, которой нет в maven.central'е, который в Maven'е используется по умолчанию как источник jar'ников. На странице этой зависимости очень кстати есть приписка:
она означает, что для того, что бы воспользоваться этой зависимостью, следует прописать этот репозиторий так же в своём pom'нике (лучше - непосредственно перед блоком dependencies):
Кроме того, версия этой зависимости явно кривая и, видимо, после обнаружения сего факта, её тупо удалили из этого репозитория, что и привело к проблеме (её там нет). По-этому на той же странице можем видеть, что
и ниже видим, что версия эта - "94ebf38" Соответственно, в таких случаях я обычно ДОПУСКАЮ, что автор библиотеки не поломал обратную совместимость и делаю операцию по замене старой транзитивной зависимости на новую явную. В принципе, для этого можно было бы просто подсунуть более новую и положиться на то, что Maven сам выберет ту, которая более новая, но Maven в этом плане может затупить, если ему не хватит метаданных, так что полагаться на этот механизм в общем случае я бы не стал. Лучше исключить транзитивную зависимость явно и уже вместо этого явно подтянуть ей на замену свою зависимость со своей версией. Короче говоря, выглядеть pom'ник c этой зависимостью и 11-й Java'ой у тебя по итогу должен примерно вот так:
-------------------- |
||||||||||||||||
|
|||||||||||||||||
NZero |
|
|||
Опытный Профиль Группа: Участник Сообщений: 358 Регистрация: 28.4.2010 Где: Москва Репутация: нет Всего: нет |
Ура, проект собрался, только теперь ругается при запуске
|
|||
|
||||
NZero |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 358 Регистрация: 28.4.2010 Где: Москва Репутация: нет Всего: нет |
Вроде разобрался что нужно писать.
В pom.xml пописал
Но при компиляции теперь ругается
|
||||||
|
|||||||
LSD |
|
||||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15711 Регистрация: 24.3.2004 Где: Dublin Репутация: 209 Всего: 537 |
Замени
на
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
NZero |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 358 Регистрация: 28.4.2010 Где: Москва Репутация: нет Всего: нет |
Спасибо) Работает |
||||||
|
|||||||
Се ля ви |
|
||||
Java/SOAрхитектор Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Так какая всё-таки версия Java'ы?
Начиная с 9-й Java'ы работает ( https://maven.apache.org/plugins/maven-comp...jo.html#release )
LSD, но вот это -
зачем ты пишешь, что нужно заменять? Оно ничем не помешает. Это - ни что иное, как флаг "-parameters" компилятору ( https://maven.apache.org/plugins/maven-comp...html#parameters ) . Начиная с 8-й версии Java'ы он добавляет метаинформацию в байт-код, благодаря которой через Reflection можно узнать имена параметров методов и конструкторов. Без этого флага имена, как бы ты их реально не называл, будут "arg0", "arg1", "arg2" и т.д. -------------------- |
||||
|
|||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15711 Регистрация: 24.3.2004 Где: Dublin Репутация: 209 Всего: 537 |
Я просто придерживаюсь мнения, что не стоит добавлять параметры которые не нужны. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Се ля ви |
|
|||
Java/SOAрхитектор Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
А... Ну в целом позиция понятна, но ведь ты не станешь отрицать, что бывают вещи, которые просто более логичны, чем поведение по-умолчанию - являются best practice и не добавлены в язык и платформу по умолчанию только из-за backward-compatibility. И в Java'е их много. Те же самые private'ы, которые нужно везде ставить или CheckedException'ы, необходимость самому писать getter'ы, setter'ы, equals'ы, hashCode'ы, toString'и, конструкторы, которые просто инициализируют поля, или вот возможность через Reflection узнавать имена параметров методов и конструкторов... Соответственно, я предпочитаю, что бы они у меня просто всегда были в любом проекте, с которым я работаю. Java не была выстроена по "Convention over Configuration", но в наших силах её для себя исправить - особенно сегодня, когда есть Lombok и Manifold. Поэтому я разрабатываю сейчас собственный стартер для проектов на Java, в который всё это и включил - и теперь уверен, что на всех моих проектах всё будет так как мне надо. -------------------- |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |