在Nexus上传jar后,Maven项目中的ClassNotFound异常

时间:2011-02-25 13:00:13

标签: java maven-2 java-ee md5 ear

我使用Nexus作为存储库管理器来处理Maven项目。简而言之,有三个部分:“Business”(打包在.jar中),“Web”(打包在.war中)和“ear”(将所有内容打包在.ear中)

我的工作非常好,但是最近我一直在尝试将一个“自定义”jar(用于md5密码转换)添加到存储库,但它没有那么好用,我做了以下内容:

  • 从网站(www.twmacinta.com)获取java文件以使用md5转换字符串。
  • 在我的项目中将它用作java文件,它工作得很好,然后我决定用它制作一个罐子。
  • 使用javac编译源代码。
  • 使用“jar”命令创建存档(“com / twmacinta / util / MD5-2.7.1.jar”)。
  • 连接到Nexus并上传jar。
  • 在Businness部分找到我的pom.xml文件,通过选项卡“Dependency”和“Add ...”添加依赖项(它找到了jar,没问题),将其添加到我的pom中。 xml文件:

    <dependency>
       <groupId>com.twmacinta.util</groupId>
       <artifactId>MD5</artifactId>
       <version>2.7.1</version>
    </dependency>
    
  • 在我的商务课程中添加了导入(它会自动找到导入,没问题),如下所示:

    import com.twmacinta.util.MD5;

此时没有错误,所以我去清理/安装/重新部署,一切都很好。

但是当我尝试登录我的应用程序时,我遇到以下异常:

java.lang.ClassNotFoundException: com.twmacinta.util.MD5
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     [...]

MD5-2.7.1.jar出现在MavenDependencies of Business和ear中,它看起来像我已经使用的任何其他库(我可以告诉所有),所以我不明白......

请帮帮我=)

尼古拉斯

3 个答案:

答案 0 :(得分:1)

您的jar文件应位于 com / twmacinta / util / MD5 / 2.7.1 / MD5-2.7.1.jar

与其他工件相比,这就是使用Maven 2 +组织罐子的方式。

答案 1 :(得分:1)

可能是应用程序没有正确发布..

答案 2 :(得分:1)

听起来好像图书馆没有捆绑在耳中或战争中 你在哪里捆绑你的依赖项?

  • ...战争/ WEB-INF / lib目录
  • 或... ear / lib

检查两个存档内部,检查其他外部库的捆绑位置,然后检查它们是否在父级或war或ear模块中声明为依赖项。

修改
好的,请检查您创建的jar文件的内容 对MD5-2.7.1.jar执行以下命令 jar -tvf MD5-2.7.1.jar
这应该列出文件的内容,确保jar的根目录中列出 com / twmacinta / util / MD5.class ,并且jar中没有包含任何其他子目录产生类条目,例如 build / com / twmacinta / util / MD5.class
此外,在查看源代码之后,我注意到库满足本机JNI或java实现,有一些方法可以使用各种系统属性禁用本机接口,否则您需要确保适当的本机库可用在预期的位置。