У меня есть банка, включенная в src / libs. Это необходимо, потому что, когда я запускаю свое приложение на предполагаемом сервере, оно не сможет загружать внешние зависимости. При построении из командной строки я получаю следующую ошибку: NoClassDefFoundError. Зависимость в моем пом:

<dependency>
     <groupId>jFuzzyLogic_core</groupId>
     <artifactId>jFuzzyLogic_core</artifactId>
     <scope>system</scope>
     <version>2.0.7</version>
     <systemPath>${basedir}\src\libs\jFuzzyLogic_core.jar</systemPath>
  </dependency>

Я прочитал противоречивые сообщения о том, правильно это или нет, и не могу понять, что делать.

Командная строка по запросу:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/jFuzz
yLogic/FIS
        at noobbot.Main.<init>(Main.java:41)
        at noobbot.Main.main(Main.java:30)
Caused by: java.lang.ClassNotFoundException: net.sourceforge.jFuzzyLogic.FIS
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

Также актуально,

[WARNING] 'dependencies.dependency.systemPath' for jFuzzyLogic_core:jFuzzyLogic_
core:jar should not point at files within the project directory, ${basedir}\src\
libs\jFuzzyLogic_core.jar will be unresolvable by dependent projects @ line 24,
column 22

Может ли кто-нибудь еще подсказать, как это сделать, если это на самом деле неправильный способ?

5
PandaBearSoup 29 Апр 2014 в 09:18

2 ответа

Лучший ответ

Попробуйте указать каталог lib в качестве репозитория в pom.xml:

<repository>
    <id>project_lib</id>
    <name>Repository in project's lib dir</name>
    <layout>default</layout>
    <url>file:///${project.basedir}/lib</url>
</repository>

Тогда, в зависимости, я не думаю, что вам нужно добавлять <systemPath> для этого Jar.

7
gaganbm 29 Апр 2014 в 05:34

В таких случаях я обычно импортирую файл JAR в локальный репозиторий. Вы можете использовать эту команду:

mvn install:install-file -Dfile=name-of-your-jar.jar -DgroupId=your-group-id -DartifactId=your-artifact-id -Dversion=your-version -Dpackaging=jar

Итак, если мы возьмем введенный вами фрагмент, команда будет такой:

mvn install:install-file -Dfile=commons-validator-1.4.0.jar -DgroupId=jFuzzyLogic_core -DartifactId=jFuzzyLogic_core -Dversion=2.0.7 -Dpackaging=jar

После этого вы можете настроить зависимость без какого-либо системного пути.

4
Ayman 29 Апр 2014 в 05:26