【问题标题】:NoClassDefFoundError after converting simple java project to maven project in eclipse在eclipse中将简单的java项目转换为maven项目后出现NoClassDefFoundError
【发布时间】:2012-10-12 13:08:10
【问题描述】:

我在 OSX (Java 1.6) 上的 eclipse 中的标准 java 项目中编写了一个类。该类使用来自另一个库的类和接口。
我选择类,然后执行 Run As > Java Application,一切正常。

之后,我尝试将我的项目作为 Maven 项目运行,但事情开始变得有点令人沮丧。我在这里总结了所有步骤,希望有人能告诉我我做错了什么: - 从标准 java 项目中,我右键单击并配置 > 转换为 Maven 项目,然后单击芬兰语。到目前为止一切顺利。

  • 然后构建路径>配置构建路径>并添加包含我的项目的文件夹。还是不错的

  • 然后我删除了所有 @Override 注释,因为我在某处读到 Maven 使用 JDK 1.5 而不是 1.6。不管怎样,我删除它们,我的危险信号就会消失。此时,我的类看起来与原始 java 项目中的完全一样(除了我删除的 @override)

  • 然后我做 Maven > 清洁。我得到构建成功

  • 然后 Maven > 安装。我获得了构建成功

  • 然后我选择我的类并执行 Run As > Java Application,我得到了这个丑陋的跟踪:

    线程“main”中的异常 java.lang.NoClassDefFoundError: LMAXTrading/algos/HeartbeatClient 引起:java.lang.ClassNotFoundException:LMAXTrading.algos.HeartbeatClient 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)

我不知道从这里去哪里。你可以想象我经历了很多试验和错误,并在 SO 和其他地方搜索以找到一种方法来让它工作。但我就是不知道出了什么问题。因此,如果有人有想法,我愿意倾听。

我正在从导航器视图以及包资源管理器视图中粘贴目录布局下方

这是我添加了 JRE 配置的 POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>someproject</groupId>
  <artifactId>someproject</artifactId>
  <version>1.0-SNAPSHOT</version>
    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

【问题讨论】:

  • Maven 可以使用任何版本的 Java。您对此有误解 - 只需配置 maven-compiler-plugin
  • 你是否在 pom.xml 中添加了必要的 Maven 依赖项?
  • 鉴于已经发生了多少变化,可能值得做一个项目 > 从 Eclipse 菜单中清理。
  • @MateiFlorescu 正如我所说,我的项目在转换为 Maven 之前运行良好
  • 尝试右键单击项目-> Maven -> 更新项目。还要检查你的运行配置,有一个名为“Classpath”的选项卡,你必须有一个名为“Maven Dependencies”的条目。

标签: java maven noclassdeffounderror


【解决方案1】:

项目目录结构与默认的Maven目录结构不匹配。 Maven 期望源位于根文件夹下的src/main/java 目录(包含pom.xml 的文件夹)。此处的源位于 src 文件夹中,因此出现 No sources to compile 错误。

您可以移动您的源代码以使用默认的 Maven 目录结构,也可以通过将以下内容添加到 pom 的 build 部分来更改 pom.xml 以明确指定您的源目录:

<sourceDirectory>${basedir}/src</sourceDirectory>

更多关于 Maven 标准目录布局的信息可以在here找到。

【讨论】:

  • 我已将 src 添加到 POM 并且构建进度到此为止:“[ERROR] mypath/someproject/src/LMAXTrading/algos/HeartbeatClient.java:[3, 19] com.lmax.api 包不存在。”这是 MYLYBRARIES 库中 jar 中的一个包(根据我上面的屏幕截图)。我是否应该将另一个源添加到 POM 以使该库自动被选中?
  • @jule64 您需要将这些库作为依赖项添加到您的 Maven POM 中。阅读有关如何执行此操作的 Maven 文档。
  • 谢谢!现在可以了。哇那是痛苦的。配置 > 转换为 Maven 项目选项确实像一台坏掉的咖啡机一样好用。感谢大家的有用建议。
  • @jule64 那么点击那个绿色的小勾怎么样?
猜你喜欢
  • 2011-01-27
  • 1970-01-01
  • 2013-10-29
  • 2019-05-15
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多