【问题标题】:Getting NoClassDefFoundError while invoking external JAR in maven project在 Maven 项目中调用外部 JAR 时出现 NoClassDefFoundError
【发布时间】:2017-06-27 14:04:47
【问题描述】:

我有一个基于 maven 的项目,我必须在其中调用外部 jar (比如 country.jar)

我在 src/lib 文件夹中添加了这个 jar,并在 pom.xml 中进行了以下设置

<dependency>
     <groupId>country-stubs</groupId>
     <artifactId>country-stubs</artifactId>
     <scope>system</scope>
     <version>1.0</version>
     <systemPath>${basedir}\src\lib\country.jar</systemPath>
  </dependency>

在运行我的应用程序时出现错误 java.lang.NoClassDefFoundError: com/fsg/bpo/webservices/countWebService

Location(com/fsg/bpo/webservices/countWebService) 指的是 country JAR 下的类

我需要添加更多设置来在 maven 中配置外部 JAR 吗?

【问题讨论】:

  • 也许这可能是一个愚蠢的问题,但是,你能检查一下 jar 里面是否是文件 com/fsg/bpo/webservices/countWebService.class ???,你可以用你的最喜欢的压缩工具(如 7zip)
  • 我会在 POM 中使用 / 作为目录分隔符,即使在 Windows 上也是如此 - 尽管我不能保证这是导致此问题的原因。
  • 另请注意,system 范围已弃用。也许你应该使用provided
  • 您是否将应用程序作为战争运行。如果是这样,您可以检查 jar 是否被捆绑

标签: java eclipse maven


【解决方案1】:

如果您使用的是作用域系统,您会说它是稍后提供的 jar。我可能会使用运行时。 Have a look at maven scopes

【讨论】:

  • 我会检查你说的 jar(country.jar)是否在构建项目中,无论是什么(战争或 JAR)。有吗?
  • 如果你正在构建一个 JAR,你必须使用 maven-assembly-plugin 在 jar 中添加依赖项。默认情况下不添加它们
【解决方案2】:

如果它是 Web 应用程序,那么您的 jar 将不会被捆绑到您的 war 文件中。然后你会得到这个问题。您可以直接将此 country.jar 复制到您的 WEB-INF lib 文件夹并使用该系统路径。

【讨论】:

    【解决方案3】:

    第一个你需要将你的外部 jar 添加到你的本地 maven 目录.. 在cmd上使用以下命令..

    mvn install:install-file -DgroupId= -DartifactId=aes-decryption -Dversion=1.0.0 -Dpackaging=jar -Dfile=./target/aes-decryption-1.0.0.jar -DgeneratePom=true

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 2013-09-21
      • 2018-10-05
      • 2011-06-23
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2023-01-13
      相关资源
      最近更新 更多