Получите NoClassDefFoundError при реализации собственного jar - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь внедрить свой собственный 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 я вижу, что в моей библиотеке есть значок папки вместо того, который есть у другой.enter image description here

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете использовать два способа включения библиотеки в ваш проект:

  • Включение библиотеки непосредственно в путь к классу вашего проекта
  • Через Maven

При использовании опции Maven вы должны быть уверены, что библиотека хорошо экспортирована в репозиторий Maven, локальный или удаленный (например, Nexus).Первое место, которое Maven будет искать при поиске библиотеки, определенной в pom.xml, находится в вашем локальном хранилище (расположенном по адресу ~/.m2).Он заглянет в Центральный репозиторий Maven (расположенный по адресу https://mvnrepository.com/repos/central).. Между ними вы можете объявить свои собственные репозитории в вашем pom.xml как

<repositories>
    <repository>
        <id>my-repo</id>
        <name>My Maven Repository</name>
        <url>${nexus.repositories.url}</url>
    </repository>
<repositories>

Как создать библиотекубыть включенным в ваш собственный локальный или удаленный репозиторий? Просто обязательно включите цель install при компиляции с Maven, а также определение репозитория в его pom.xml

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