Я пытаюсь внедрить свой собственный jar (библиотеку) в другой проект, над которым я работаю.Но я получаю ошибку NoClassDefFoundError
, когда я запускаю программу и пытаюсь создать экземпляр класса из библиотеки, которую я построил.
Я пытаюсь добавить зависимость по-разному, с локальным репозиторием maven или добавлениемфайл JAR напрямую, как внешний файл в пути сборки.Я не получаю никаких предупреждений / ошибок в Eclipse, и я могу успешно собрать и установить приложение с Maven.Но когда я выполняю часть кода, которая использует класс из этой библиотеки, я получаю NoClassDefFoundError.
Мой идентификатор группы библиотек - это com.mycompany.myapp, а используемые мной классы находятся в пакете com.mycompany.myapp.business.Я пытаюсь переместить класс в родительский пакет на всякий случай, но я всегда получаю одну и ту же ошибку.
1 - мне нужно определить, какие классы должны быть доступны при импорте jar?
2- Нужно ли мне скомпилировать библиотеку особым образом, кроме пакета / установки mvn clan?
3 - Нужно ли добавлять в мою библиотеку те же зависимости, что и в моей библиотеке?родительский проект, чтобы все работало?
Это мои дети pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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.mycompany.mylibrary</groupId>
<artifactId>mylibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.47</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.47</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.0-M1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.5.0-M1</version>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.3.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</project>
А затем в моем основном проекте я создаю экземпляр класса следующим образом:
Init oInit = new Init();
Где Init - это открытый класс, определенный в пакете com.mycompany.mylibrary.business
.
java.lang.NoClassDefFoundError: com/mycompany/mylibrary/business/Init
pom.xml из основного проекта:
<dependency>
<groupId>com.mycompany.mylibrary</groupId>
<artifactId>mylibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
В родительском проекте в библиотекахимпортированный maven я вижу, что в моей библиотеке есть значок папки вместо того, который есть у другой.