Jar-файл, ссылающийся на Maven-файл JAR, не работает согласованно - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть приложение Swing, которое использует классы из артефакта Maven math.geom2d:javaGeom:0.11.1. Чтобы создать файл JAR в выпуске GitHub, я использую модифицированную задачу «fatJar» build.gradle, поэтому классы geom2d включены в файл JAR. Для файла jar для моего приложения на Maven я не включаю классы geom2d, поэтому эти классы не отображаются в этом файле jar, но на них ссылаются как на зависимости.

Странно то, что на моей машине этот (меньший) файл jar стабильно работает нормально, поэтому я подумал, что все в порядке, даже если это странно! Я решил попробовать его на компьютере моей жены, и он зависает с NoClassDefFoundError. Я подумал, может быть, это потому, что у нее не было Maven установлен ... пытался установить его, но без разницы! Помощь будет оценена!

Вот pom.xml на Maven для моего приложения:

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jpaulmorrison</groupId>
<artifactId>drawfbp</artifactId>
<version>2.18.4</version>
<name>DrawFBP</name>
<description>Diagramming Tool for Flow-Based Programming</description>
<url>https://github.com/jpaulm/drawfbp</url>
<licenses>
<license>
<name>GNU Lesser General Public License, Version 3.0</name>
<url>https://www.gnu.org/licenses/lgpl-3.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<id>jpaulmorr</id>
<name>
John Paul Rodker Morrison (Software architect/developer)
</name>
<email>jpaulmorr@gmail.com</email>
</developer>
<developer>
<id>bobcorrick</id>
<name>Bob Corrick (Software architect/developer)</name>
<email>bobcorrick@outlook.com</email>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/jpaulm.git</connection>
<developerConnection>scm:git:https://github.com/jpaulm.git</developerConnection>
<url>https://github.com/jpaulm.git</url>
</scm>
<dependencies>
<dependency>
<groupId>math.geom2d</groupId>
<artifactId>javaGeom</artifactId>
<version>0.11.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

Спасибо @ samvel1024! Теперь у меня есть лучшее представление о том, что происходит:

  • файл jar без классов geom2d может работать, потому что у меня есть geom2d в моем classpath - его больше нет!

  • Я создаю fatJar, используя задачу в build.gradle, но uploadArchives создает новый файл jar, который не является «толстым»!

  • Итак, я бы хотел добавить задачу fatJar в свою функцию uploadArchives:

ИЛИ

  • подавить задачу jar в uploadArchives, поэтому она нене испортите "толстую" баночку, которая у меня уже есть! Я пробовал «jar.enabled = логическая переменная», но я не могу установить его в «ложь» ...

Любой из этих двух вариантов должен быть простым на разумном языке, но яне могу заставить ни на работу! Помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Оказалось так просто! Оказалось, что второй вариант выше:

"... подавить задачу 'jar' в uploadArchives, чтобы она не испортила" жирный "jar, который у меня уже есть! ..."

Добавьте -x jar в командную строку для uploadArchives!

В любом случае, спасибо, @ samvel1024!

0 голосов
/ 05 ноября 2019

Если вы собираетесь использовать maven для создания jar-файла, вам нужно включить все зависимости, которые есть в вашей сборке gradle.

Если вы хотите, чтобы jar-файл можно было запускать с java -jar my.jarзатем, кроме того, вам нужно использовать какой-нибудь плагин сборки, чтобы сделать это за вас.

Вы можете найти более подробную информацию здесь

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