【发布时间】:2014-09-10 13:11:47
【问题描述】:
我正在尝试编译使用 Gradle 和 Maven 的项目。该项目使用我本地 Maven 存储库中的另一个库。该库在 Gradle 和 Maven 中被引用:
分级:
dependencies{
compile 'cf.charly1811.java.utils:MimeType:1.0'
}
马文:
<!-- 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>
编辑 我忘了澄清一件事: 我使用 IntelliJ IDEA。当我尝试使用“运行”编译项目时,它会编译所有内容,但我没有收到此错误。只有当我使用 Gradle 或 Maven 编译项目时才会发生这种情况
【问题讨论】:
-
请删除您的清单文件并执行 Maven 全新安装。很确定该软件包未在您的清单中导入。如果此问题仍然存在,则手动导入包并调查为什么它不能自行拉入。
-
我删除了我的 Manifest 文件,重新编译了 MimeType 库并重新编译了我的主项目。仍然得到同样的错误。我已经手动导入了 MimeTYPE 库并再次尝试,现在它正在工作。也许问题来自 MimeType pom 文件?我用图书馆和项目的 pom 文件更新了问题
-
没有。我认为构建删除您的本地存储库可能是一个问题。从工作空间中删除项目...再次检查并构建它。如果问题仍然存在,那么您需要进一步调查。您是否在 groovy 中使用此导入,这在清单的导入中表现得很奇怪。
-
我删除了所有 Maven 和 Gradle 文件,为 MimeType 重新创建 pom.xml,重新编译,为 HttpServer 重新创建 pom,添加 MimeType 作为依赖项。结果一样...
-
尝试添加调试器加载卸载日志并找出问题所在。
标签: java maven intellij-idea gradle