gpt4 book ai didi

java - 实现自己的 jar 时出现 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-12-02 04:44:04 27 4
gpt4 key购买 nike

我正在尝试在我正在从事的另一个项目中实现我自己的 jar (库)。但是当我运行程序并尝试从我构建的库实例化一个类时,我收到错误 NoClassDefFoundError

我尝试以不同的方式添加依赖项,使用 maven 本地存储库或直接将 jar 文件添加为构建路径中的外部 jar。我在 Eclipse 中没有收到任何警告/错误,我可以使用 Maven 成功构建和安装应用程序。但是,当我执行使用该库中的类的代码部分时,我收到 NoClassDefFoundError。

我的库 groupId 是 com.mycompany.myapp,我使用的类位于 com.mycompany.myapp.business 包中。我尝试将类移动到父包以防万一,但我总是遇到相同的错误。

1 - 导入 jar 时我需要定义哪些类需要可用吗?

2- 除了 mvn clan package/install 之外,我是否需要以特定方式编译库?

3 - 我是否需要在父项目的库中添加相同的依赖项才能使一切正常工作?

这是我的 child 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 包中定义的公共(public)类。

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

最佳答案

您可以使用两种方法将库包含到您的项目中:

  • 将库直接包含到项目类路径中
  • 通过 Maven

使用 Maven 选项时,必须确保库已正确导出到本地或远程(例如 Nexus)的 Maven 存储库。当查找 pom.xml 中定义的库时,Maven 将首先搜索本地存储库(位于 ~/.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>

如何构建要包含到您自己的本地或远程存储库中的库?只需确保在使用 Maven 编译时包含安装目标以及存储库定义到其 pom.xml

关于java - 实现自己的 jar 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com