【问题标题】:ClassNotFound exception in Maven project after uploading a jar on Nexus在 Nexus 上上传 jar 后,Maven 项目中的 ClassNotFound 异常
【发布时间】:2011-02-25 13:00:13
【问题描述】:

我使用 Nexus 作为存储库管理器从事 Maven 项目。简而言之有3个部分:“业务”(打包在.jar中),“Web”(打包在.war中)和“耳朵”(将整个东西打包在.ear中)

我工作得很好,但最近我一直在尝试向存储库添加一个“自定义”jar(用于 md5 密码转换),但效果不佳,我做了以下操作:

  • 从网站 (www.twmacinta.com) 获取 java 文件以使用 md5 转换字符串。
  • 在我的项目中将它用作 java 文件,它工作得非常好,然后我决定用它制作一个 jar。
  • 使用 javac 编译源代码。
  • 使用“jar”命令创建存档(“com/twmacinta/util/MD5-2.7.1.jar”)。
  • 连接到 Nexus 并上传 jar。
  • 进入我的业务部分的 pom.xml 文件,通过选项卡“依赖项”和“添加...”添加依赖项(它找到了 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 出现在 Business 和 ear 的 MavenDependencies 中,它看起来就像我已经在使用的任何其他库(据我所知),所以我不明白......

请帮帮我=)

尼古拉斯

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,它在 Nexus 下,就像其他罐子一样,我认为这方面没有问题 =)
    • 糟糕,我的意思是“在 Nexus 上就是这样”,带有 com/twmacinta/util/MD5/2.7.1/MD5-2.7.1.jar 层次结构
    • 如果您的项目是Web项目,jar文件是否与应用程序(web-inf/lib)一起正确部署?我知道对于以前的 Eclipse WTP 版本,必须手动修改 Java EE 依赖项,否则不会部署 jars(替代方法是执行 mvn eclipse:clean eclipse:eclipse 来重新生成文件..)
    • 我在我的 maven 配置目标中添加了 eclipse:clean eclipse:eclipse,但是并没有解决问题... =(
    【解决方案2】:

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

    【讨论】:

    • 但它之前工作正常,我已经使用了与 MD5 相同的存储库中的“外部”jar wicket-contrib-javaee
    【解决方案3】:

    听起来图书馆并没有被捆绑在耳朵或战争中。
    您将依赖项捆绑在哪里?

    • ...war/web-inf/lib
    • 或...ear/lib

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

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

    【讨论】:

    • 我的最终存档是“ear”,在它下面我可以看到“Maven Dependencies”以及我所有的库,包括“MD5-2.7.1”。我还有一个未版本化的文件夹“target/MyProject-ear-1.0-SNAPSHOT”,我可以在其中看到“Manifest.MF”和我所有的 jar,再次包括“MD5-2.7.1”
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2017-09-22
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多