gpt4 book ai didi

java - 我如何使用 Maven 中其他项目的类? (抛出 ClassNotFoundException 和 NoClassDefFoundError)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:50 24 4
gpt4 key购买 nike

我有两个 Vaadin 项目(我将它们命名为 A 和 B)。两者都使用 Maven 来解决依赖关系,并且在同一个工作区中。我正在使用 Eclipse,并且正在使用 m2e-plugin。我想在项目 A 中使用 B 的一些类。在 Eclipse 中,我可以在没有错误/警告的情况下实例化它们,但是当我尝试运行 A 时,我得到一个 ClassNotFoundException 和一个 NoClassDefFoundError通过实例化 B 类。

A 的 .class 文件位于 ...\workspace\A\target\classes 而对于项目 B 它们位于 .. .\workspace\B\target\classes.我一直在尝试解决这个问题,但没有找到解决方案。到目前为止我尝试了什么:

  • 配置构建路径 -> Libaries -> 添加类文件夹 -> B\target
  • 配置构建路径 -> Libaries -> 添加外部类文件夹 -> B\target
  • 配置构建路径 -> 项目 -> 添加 -> B

我认为添加项目是必要的,因为当我删除它时,当我尝试在 A 中使用 B 中的类时,Eclipse 会给我错误消息

我不知道还能做什么。也许我必须配置我的 pom.xml 文件,但我不知道我必须在那里做什么。

编辑:在项目B的pom.xml中:

<groupId>de.qufis</groupId>
<artifactId>CentwertApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>CentwertApp</name>

在项目A的pom.xml中:

    <dependency>
<groupId>de.qufis</groupId>
<artifactId>CentwertApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
<scope>import</scope>
</dependency>

我用 maven build 为项目 B 做了干净的编译。然后我尝试对项目 A 执行相同的操作,但随后收到错误消息:在 vaadin-addons ( http://maven.vaadin.com/vaadin-addons ) 中找不到 Artifact de.qufis:CentwertApp:war:0.0.1-SNAPSHOT

当我正常运行应用程序时,我仍然得到 ClassNotFoundException 和 NoClassDefError。

编辑 2:我已经添加了

<scope>compile</scope>

当我运行 Maven 构建(干净编译)时,我的部分构建过程如下所示:

[信息] 构建 centwertAdmin 0.0.1-SNAPSHOT

[信息] ------------------------------------------ ------------------------------

[警告] de.qufis:CentwertApp:war:0.0.1-SNAPSHOT 的 POM 丢失,没有可用的依赖信息

[信息] ------------------------------------------ ------------------------------

[信息] 构建失败

然后是错误信息:

[错误] 无法在项目 centwertAdmin 上执行目标:无法解析项目 de.qufis:centwertAdmin:war:0.0.1-SNAPSHOT 的依赖关系:无法找到 de.qufis:CentwertApp:war:0.0.1-SNAPSHOT在 http://maven.vaadin.com/vaadin-addons已缓存在本地存储库中,直到 vaadin-addons 的更新间隔结束或强制更新后才会重新尝试解析 -> [帮助 1]

最佳答案

你能试着删除<packaging>war</packaging>吗?从乙? Maven 的默认打包是jar ,这就是 B 所需要的。

另外,将 B 添加到 dependencies A.

  • 构建 B 项目。使用 mvn clean install , 那会安装 B 的本地存储库 (.m2) 中的 JAR+POM。
  • 验证它在那里...然后Maven 将能够找到它,因此您不会收到错误“Could找不到 Artifact de.qufis:CentwertApp"
  • 构建 A。

通常,依赖项是 JAR 类型。如果 B 必须 是 WAR,请参阅 this .

关于java - 我如何使用 Maven 中其他项目的类? (抛出 ClassNotFoundException 和 NoClassDefFoundError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com