7

私は戦争のアーティファクトを持っていて、瓶からそれらのクラスのいくつかを使用する必要があります。クラスを別のプロジェクトに移動できません。次に、次の構成を使用して、Webアプリケーションに含まれているクラスとリソースを「アタッチされた」アーティファクトとしてデプロイします。

<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の2つのアーティファクトがデプロイされます。

これらのクラスを使用するには、次のようにアーティファクトを参照します。

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

Jenkinsからコンパイルした場合、すべてが正しく機能しますが、Eclipseからローカルでテストを実行すると、参照クラスが見つかりません。(java.lang.NoClassDefFoundError)

私はそれがMavenEclipseプラグインのバグかもしれないと思います、誰かが起こり得る考えを持っていますか?

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内のソリューションは、ワークスペース内のプロジェクトを、warプロジェクトのクラスが必要な適切なプロジェクトに手動で追加するだけです。

于 2012-05-02T17:06:26.353 に答える