7

我有一个战争文物,我需要从一个罐子里使用他们的一些类。我无法将这些类移动到另一个项目,然后我使用以下配置将包含在我的 webapp 中的类和资源部署为“附加”工件:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <attachClasses>true</attachClasses>
    </configuration>
</plugin>

这将导致部署两个工件:mywebapp-1.0-SNAPSHOT.war 和 mywebapp-1.0-SNAPSHOT-classes.jar。

要使用这些类,我引用工件如下:

    <dependency>
        <groupId>mygroup</groupId>
        <artifactId>mywebapp</artifactId>
        <version>${project.version}</version>
        <classifier>classes</classifier>
    </dependency>

当我从 Jenkins 编译时一切正常,但是当我从 Eclipse 本地运行测试时找不到参考类。(java.lang.NoClassDefFoundError)

我认为这可能是 maven eclipse 插件中的一个错误,有人知道会发生什么吗?

4

2 回答 2

5

http://wiki.eclipse.org/M2E-WTP_FAQ上描述了解决方法:

但是存在一种解决方法,无论项目是否在 Eclipse 中构建,我们都需要更改依赖关系。在您的依赖项目中,您可以配置以下内容:

<dependencies>
 ...
 <dependency>
   <groupId>com.company</groupId>
   <artifactId>mywebapp</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <classifier>${webClassifier}</classifier>
 </dependency>
 ...
</dependencies>
...
<properties>
 ...
 <webClassifier>classes</webClassifier>
</properties>
...
<profiles>
 <profile>
   <id>m2e</id>
   <activation>
     <property>
       <name>m2e.version</name>
     </property>
   </activation>
   <properties>
     <webClassifier></webClassifier>
   </properties>
 </profile>
</profiles>

当使用 m2e 构建项目时,m2e 配置文件会自动激活,在其他情况下会被忽略。仅在这种情况下,依赖项目将使用空分类器来引用 Web 项目,这将按预期添加到类路径中。

于 2013-09-19T09:26:43.440 回答
4

我的简单答案是 Eclipse 的错误跟踪系统的以下链接:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365419

看看里面的答案。

是的,这是 Eclipse 本身的问题..

Eclipse 中的解决方案只是在您的工作空间中手动将项目添加到您需要从您的战争项目中取出类的适当项目中。

于 2012-05-02T17:06:26.353 回答