Зависимости maven не добавляются в jar в затмении - PullRequest
0 голосов
/ 10 ноября 2018

Я пишу проект maven с eclipse 2018.09 под java 11, и у меня проблема с созданием maven jar. Когда я очищаю пакет проекта, он доставляет мне банку, но в нее не добавляются зависимости, и у меня иногда появляется предупреждение в eclipse, например:

Элемент записи classpath (например) не будет экспортирован, это может привести к исключению ClassNotFoundException.

Что на самом деле происходит, когда я запускаю свой jar-проект.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Вы можете просто добавить это в свой pom.xml (под тегом ):

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>App</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Не забудьте изменить основной класс на вашу точку входа (к какому классу относится static void main(string[args])). Теперь, когда вы запустите команду mvn clean install, в папке targets появится файл с именем yourproject-version-SNAPSHOT-jar-with-dependencies.jar

0 голосов
/ 11 ноября 2018

это доставляет мне банку, но в [it] не добавляются зависимости

это совершенно нормально. По умолчанию, когда Maven создает jar-файл, он не добавляет в него никаких зависимостей, а только .class и ресурсы вашего текущего проекта.

Когда вы запускаете вашу программу, вы хотите, чтобы она нашла ваши зависимости, в противном случае вы столкнетесь с ClassNotFoundException. Поэтому вы должны сконфигурировать ваш classpath для ссылки на зависимости.

1 - если вы хотите запустить свою программу с локального компьютера с помощью Maven, используйте плагин exec Maven с целью <java>, определенной в вашей помпе, как описано здесь: https://www.mojohaus.org/exec-maven-plugin/usage.html#Java_goal

В качестве альтернативы вы можете запустить его из панели запуска в вашей IDE. IDE создаст для вас classpath, а classpath будет содержать ваши зависимости.

2 - если вы хотите запустить из командной строки на любом компьютере, вы должны скопировать все ваши зависимости в один каталог (используя плагин зависимостей Maven mvn dependency:copy) и запустить ваш jar следующим образом:

java -cp myProgram.jar:dependencyDirectory/* com.blabla.MainClass

(остерегайтесь использования ';' или ':' и '/' или '\' в зависимости от Linux / Windows)

3- в качестве альтернативы вы можете запустить jar с помощью java -jar myprogram.jar, но только если он содержит правильный файл MANIFEST.MF, в котором местоположение всех зависимостей жестко задано.

Мой совет - сначала нацелить решение 1 или 2.

PS: вы также можете создавать «толстые банки» или «убер-банки», содержащие ваши зависимости, но я бы посоветовал вам сначала не ориентироваться на это решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...