我正在尝试编译使用Gradle和Maven的项目。该项目在我的本地maven存储库中使用另一个库。该库在Gradle和Maven中引用:
摇篮:
dependencies{
compile 'cf.charly1811.java.utils:MimeType:1.0'
}
的Maven:
<!-- Dependencies -->
<dependencies>
<dependency>
<groupId>cf.charly1811.java.utils</groupId>
<artifactId>MimeType</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
当我尝试使用mvn clean package
或gradle clean jar
成功编译项目时。调用MimeType类时出现错误:
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: cf/charly1811/java/utils/MimeType at cf.charly1811.java.web.RequestHandlerThread.process(RequestHandlerThread.java:120)
at cf.charly1811.java.web.RequestHandlerThread.handleRequest(RequestHandlerThread.java:85)
at cf.charly1811.java.web.RequestHandlerThread.run(RequestHandlerThread.java:64)
Caused by: java.lang.ClassNotFoundException: cf.charly1811.java.utils.MimeType
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)
... 3 more
我不知道导致此错误的原因...... 请帮忙。
编辑: MimeType pom.xml:
<project>
<modelVersion>4.0.0</modelVersion>
<name>MimeType</name>
<description>Library to easily get the type of a file</description>
<groupId>cf.charly1811.java.utils</groupId>
<artifactId>MimeType</artifactId>
<version>1.0</version>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>
</project>
HttpServer(主项目)pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<name>HttpServer</name>
<description>A simple HTTP Server written in JAVA</description>
<groupId>cf.charly1811.java.web</groupId>
<artifactId>HttpServer</artifactId>
<version>1.0</version>
<!-- Dependencies -->
<dependencies>
<dependency>
<groupId>cf.charly1811.java.utils</groupId>
<artifactId>MimeType</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<!-- License -->
<licenses>
<license>
<name>Private use</name>
<url>http://choosealicense.com/licenses/no-license/</url>
<comments>This Software is for private use Only</comments>
</license>
</licenses>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>cf.charly1811.java.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
EDIT 我忘了澄清一件事: 我使用IntelliJ IDEA。当我尝试使用&#34; Run&#34;来编译项目时它编译了所有内容,但我没有收到此错误。它只发生在我使用Gradle或Maven编译项目时
答案 0 :(得分:0)
尝试做mvn clean install
它将尝试编译所有类并尝试将生成的项目jar保存在本地存储库中如果发生某些问题你应该能够解决它,否则发布它会看到< / p>
答案 1 :(得分:0)
请删除您的清单文件并进行maven clean安装。很确定包没有在您的清单中导入。如果此问题仍然存在,请手动导入软件包,并调查为什么它不会自行引入。
答案 2 :(得分:0)
阅读此NoClassDefFoundError on Maven dependency后,我注意到以下内容:
“默认情况下,Maven不会在JAR文件中捆绑依赖项 构建,并且你没有在类路径上提供它们 尝试在命令行执行JAR文件。这就是为什么 尝试执行时,Java VM无法找到库类文件 代码“。
我认为对Gradle来说是一回事
现在我应该找到一种方法来捆绑我的依赖项。
修改强> 我终于找到了一个解决方案(Gradle)
创建build.gradle apply
以下插件:
apply plugin:'java'
apply plugin: 'application'
使用此命令编译项目
gradle clean distZip
如果您只想运行程序:
gradle clean run
修改强>
如果您使用Maven。您可以使用Apache Maven shade Plugin将依赖项捆绑在Jar文件中