Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
M2Eclipse&;工作区项目_Eclipse_Maven_M2eclipse_Workspace - Fatal编程技术网

M2Eclipse&;工作区项目

M2Eclipse&;工作区项目,eclipse,maven,m2eclipse,workspace,Eclipse,Maven,M2eclipse,Workspace,在EclipseHelios中,m2eclipse插件在任何运行配置中都不包括本地工作区中的项目 我已经设置了这个测试场景: ProjectA + src/main/java/a/TestInA.java + pom.xml ProjectB + src/main/java/b/TestInB.java ("main()" calls "a.TestInA.main()") + pom.xml (includes reference to ProjectA) 在两个项目上都设置了“从工作区项

在EclipseHelios中,m2eclipse插件在任何运行配置中都不包括本地工作区中的项目

我已经设置了这个测试场景:

ProjectA
+ src/main/java/a/TestInA.java
+ pom.xml

ProjectB
+ src/main/java/b/TestInB.java ("main()" calls "a.TestInA.main()")
+ pom.xml (includes reference to ProjectA)
在两个项目上都设置了“从工作区项目解析依赖项”标志。这在编译时工作得很好,即编译器在“b.TestInB”中找到对“a.TestInA”的引用,“Maven依赖项”列表中包含对“ProjectA”的引用。但当我尝试实际运行“b.TestInB”时,我得到一个NoClassDefFoundError:

Exception in thread "main" java.lang.NoClassDefFoundError: a/TestInA
at b.TestInB.main(TestInB.java:13)
Caused by: java.lang.ClassNotFoundException: a.TestInA
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 1 more
实际上,系统属性“java.class.path”不包括ProjectA的“target/classes”文件夹(或任何其他文件夹)

以下是我安装的版本:

  • Eclipse:Helios服务版本2(构建id:20110301-1815)
  • m2eclipse:0.12.1(构建id:20110112-1712)

请记住,Maven使用本地存储库来共享JAR。如果您尚未安装(mvn安装)模块A,则模块B(取决于模块A)将不会意识到。IDE在幕后悄悄地对此进行补偿。

我终于在配置中发现了错误。它与工作区依赖关系中的“archiverClassifier”有关。我的POM被设置为根据运行的编译器生成不同名称的工件

这是使用“jdk1.5”和“jdk1.6”的配置文件完成的,设置“archiverClassifier”变量:

<profiles>
    <profile>
        <id>jdk1.5</id>
        <activation>
            <jdk>1.5</jdk>
        </activation>
        <properties>
            <compilerTarget>1.5</compilerTarget>
            <archiverClassifier>jdk1.5</archiverClassifier>
        </properties>
    </profile>
    <profile>
        <id>jdk1.6</id>
        <activation>
            <jdk>1.6</jdk>
        </activation>
        <properties>
            <compilerTarget>1.6</compilerTarget>
            <archiverClassifier>jdk1.6</archiverClassifier>
        </properties>
    </profile>
</profiles>

jdk1.5
. 所以我猜这是一个bug,我只是回答了我自己的问题:)


(另一方面,单元测试不会出现此问题,因为依赖项的“测试类”目录已正确添加到类路径中。)

如何运行应用程序?通过maven?我让Eclipse使用“运行配置”启动应用程序。此“运行配置”的类路径包括“Maven依赖项”条目。我使用的任何第三方库都包含在此条目中,但不包含项目依赖项。最重要的是,当我运行一个测试类时,“ProjectA/target/testclasses”被包括在内……在编译时,“Resolve workspace dependencies”标志会处理这个问题,但在运行时不会?这没有道理。此外,它在使用“mvn eclipse:eclipse”而不是m2eclipse时工作。您如何解释?@Wim在运行项目时,是调用内部Eclipse托管Maven还是调用外部(CLI)版本?@Gary:我使用的是内置Maven。@Wim最终检查-如果您在模块A上运行mvn安装,然后立即重复模块B的执行是否有效?@Gary:当我安装ProjectA的JAR工件并禁用工作区解析时,ProjectB成功运行。(我以前就知道了,但我真的不想为我的实时环境安装所有依赖项工件…)
<dependencies>
    <dependency>
        <groupId>com.brain2</groupId>
        <artifactId>ProjectA</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <classifier>${archiverClassifier}</classifier>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>