M2EおよびMavenで生成されたソースフォルダーをEclipseソースフォルダーとして持つ


91

私はEclipseのMavenプロジェクトを持っており、アノテーションプロセッサを実行してコードを生成するMavenゴールがあります。このコードの出力フォルダーはtarget / generated-sources / aptです。

eclipseがこの生成されたコードを表示するためには、eclipseプロジェクトにソースフォルダーとしてtarget / generated-sources / aptを追加する必要があります。

ただし、これにより、「Maven Configuration Problem」タイプのエラーが発生します。

プロジェクト構成がpom.xmlで最新ではありません。プロジェクト構成の更新を実行する

EclipseにはMavenのセットとは異なるソースフォルダーのセットがあるため、これが当てはまる理由を理解していると思います。しかし、生成されたソースフォルダーを表示するにはEclipseが必要なので、この別のセットが必要です...

ビルドされた純粋なMavenを実行する場合、これらのソースフォルダーはMavenによってビルドに含まれます。

ところで、Maven Eclipseプラグインの公式Eclipseリリースであるm2e 1.0にアップグレードしました-以前はm2eclipseでした。古いm2eclipseバージョンに戻る必要がある前に、m2eプラグインでこれに対する回避策/解決策を見つけることができるかどうかを確認したいと思います。

回答:


105

build-helper-pluginでソースディレクトリをアタッチする必要があります

そのようです:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>

また、次のことも必要です。

  • Eclipse Marketplaceから「Apt M2E Con​​nector」をインストールします。これを行うには、pom.xmlの[概要]タブでエラーをクリックし、[検出]を選択します。
  • build-helper-maven-pluginのプラグイン実行フィルターがないことを確認します(https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.htmlを参照)

4
m2e connector for build-helper-maven-pluginがEclipseにインストールされている場合、このソリューションはうまく機能します
Brad Cupit 2012年

うまくいきません。build-helper-pluginのセットアップについて詳しく教えてください。
Kevin Wong

<plugin> <groupId> org.codehaus.mojo </ groupId> <artifactId> build-helper-maven-plugin </ artifactId> <executions> <execution> <id> add-source </ id> <phase> generate-ソース</ phase> <goals> <goal> add-source </ goal> </ goals> <configuration> <sources> <source> $ {project.build.directory} / generated-sources / java / </ source> <source> $ {project.build.directory} / jaxws / wsimport / java </ source> </ sources> </ configuration> </ execution> </ executions> </ plugin>
Kevin Wong

2
Keplerでは、ビルドヘルパーmavenプラグイン用のm2eコネクタもインストールする必要がありました。(ちょうどEclipseのMaven pomエディターでpomを開いて、上部にある赤いリンクをクリックしてください)。
Snicolas 2013

1
私の知る限り、のようbuild-helper-maven-plugin<version>のように指定3.2.0(執筆など最新)、アプトM2Eコネクタを使用する必要はありません。現在、Eclipseに埋め込まれたMaven 3.6.3を使用してEclipse IDE 2020-06で作業しており、ソースフォルダーのディレクトリパスを追加しようとした後、除外(**)があるソースフォルダーに関する問題は解消されました。 (** / *。java)。
tom_mai78101

80

エラーメッセージを右クリックします。

プロジェクト構成がpom.xmlで最新ではないプロジェクト構成の更新を実行

[問題ビュー]で[ クイックフィックス ] を選択し、[ 完了 ]をクリックしてデフォルトの更新プロジェクト構成を選択します。これはそれを修正します。


1
これも私にとってはうまくいきます。なぜこれは受け入れられた答えではないのですか?受け入れられた答えは多すぎるようです。
Niels Basjes

14
@NielsBasjes役に立たないだけなので、これは受け入れられない回答です。Eclipseのビルドパスに何かを追加すると、POMとの同期が失われるため、警告が表示されます。プロジェクト構成を更新すると、最初の問題であった余分なビルドパスエントリが削除されるだけです。
Phil

4

m2e / maven / aptの新しいバージョンに切り替えた後、buildhelperによって追加されたビルドパスが原因でファイルが複製されたためにビルドエラーが発生したため、ビルドヘルパーから「apt-generated」フォルダーを削除する必要がありました。

M2EのMaven構成の更新を介して「apt-generated」フォルダーを追加せずに、Eclipseの問題を修正するために、この問題を修正するM2Eプラグインを作成しました。maven-apt-pluginで設定されたoutputDirectoriesをプロジェクトのビルドパスに追加します。

https://apt-m2e.googlecode.com


1
残念ながら@Stefan Woプラグインページ/リポジトリはgooglecode.comで404になりました。それとEclipseマーケットプレイスのエントリを更新してもよろしいですか?参照marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

m2e 1.0では、Mavenプラグインの処理が変更されました。コード生成プラグインの特定のm2e拡張が不足している可能性があります。これが私が見つけたすべてのドキュメントです。

このバグレポートも関連している可能性があります。


m2eは新しく、多くの優れた開発があると思います
マイケル

2
問題は、m2eclipseがかつて使用していたように、Mavenプラグインをm2eclipseプロジェクトに適用するだけで、ほとんどの場合はたまたま機能するだけで、常に正しいことを保証できるとは限らなかったことです。新しいアプローチはより強力な可能性がありますが、多くのMavenプラグインに対応するm2eが必要です。
Nicola Musatti、2011

2

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

CXF JIRA(1を参照)で、cxf-codegen-plugin自体にライフサイクルマッピングを追加するように要求します。これにはm2e 1.1が必要ですが、ライフサイクルマッピングAPIの変更頻度がcxf-codegen-pluginやcxfよりも少ないと想定すると、cxfプロジェクトの外部でコネクタを構築するよりも良いアプローチだと思います。


0

また、ディスカバリー・カタログで入手可能なbuildhelper m2eコネクターを使用することもできます。私はEclipse 3.7を使用しています


0

Web開発者のためのEclipse Java EE IDE。バージョン:Juno Service Release 1

mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.5.0

mvn clean install

完璧に動作します。

しかし、日食では、Asincクラスで同じエラーが発生します。

プロジェクトでF5キーを押すだけです。この問題を修正します。


0

これは、3.0.6バージョンも含まれているSpring 3.1.1を使用するとうまく機能することがわかったものです。プラグインをセットアップしてpomの適切な領域に配置し、arglineとendorseddirsを含めて、Javaソースをtarget / generated-sources / cxfフォルダーに配置すると、Mavenでソースを生成できます。

....

 <properties>...

   <dependencyManagement>
      <dependencies>.....
   </dependencyManagement>

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>eSurety</finalName>
    <plugins>
        <!-- Force Java 6 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- Deployent on AS from console
        <plugin>
            <groupId>org.jboss.as.plugins</groupId>
            <artifactId>jboss-as-maven-plugin</artifactId>
            <version>${version.jboss.as.maven.plugin}</version>
        </plugin>
        -->

        <!-- wildbill added tomcat plugin -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>              
        </plugin>

        <!-- Surefire plugin before 2.9 version is buggy. No need to declare here,
              it's being referenced below w/ the version
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
        </plugin>
        -->

        <!-- developer added these -->   
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>           
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>                       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>                       
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>target/generated-sources/cxf</outputDirectory>
            </configuration>                      
        </plugin>                                                 
    </plugins>
</build>



<!-- *********************** Profiles ************************************ -->
<profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be 
            used when invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization 
            your app will need. -->
        <!-- By default that is to put the resulting archive into the 
            'deployments' folder. -->
        <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
        <id>projName</id>
        <build>
            <plugins>                                                   
                <plugin>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>2.5.2</version>                        
                    <executions>
                        <execution>
                            <id>process-sources</id>
                            <phase>generate-sources</phase>                                                                                               
                            <configuration>
                                <fork>once</fork>
                                <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>                                          
                            </configuration>
                            <goals>                             
                                <goal>wsdl2java</goal>
                            </goals>
                        </execution>
                    </executions>                       
                    <dependencies>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-impl</artifactId>
                           <version>2.2</version>
                        </dependency>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-xjc</artifactId>
                           <version>2.2</version>
                        </dependency>
                     </dependencies>
                </plugin>

                <!-- Actual war created in default target dir -->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>                                               
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

wsdlフォルダーが$ {basedir} / src / main / resourcesにある場合は、自動的に見つかります

お役に立てれば!〜wildbill


0

なんらかの理由でビルドヘルパープラグインを使用できない最も簡単な方法(それほど便利ではなく、やや面倒ではありません)の場合、これに対処するために次のことを発見しました。

  1. 生成されたソースコードを独自のプロジェクトまたはサブモジュールに分離します。
  2. 親プロジェクトで作業しているときは、このプロジェクトを主に閉じたままにするか、Eclipseにインポートしないでください。
  3. 生成されたコードを必要とする親プロジェクトで、Maven pom依存関係を介して、生成されたソースコードプロジェクトに依存していることを確認してください。
  4. 生成されたコードを更新する必要がある場合は、生成されたコードプロジェクトに移動して実行しmvn installます。次に、右クリックして[ Maven ]- > [プロジェクトの更新... ]を選択して、親プロジェクトを更新します。

これは通常、SOAP WSDL(Apache CXF)やデータベースから生成されたコード(jOOQ)などのコード生成に準静的ソースを使用するプロジェクトに適しています。APTやその他のAspectJのようなコードでは、ソースを頻繁に編集しているため、同様に機能しません。


-1

ビルドヘルパープラグインの設定はうまくいきました。

ただし、宛先フォルダは、アノテーション処理自体に使用しているプラ​​グインの構成と常に同じでなければならないことに注意してください。

たとえば、maven-processor-pluginは、デフォルトでターゲットフォルダー$ {project.build.directory} / generated-sources / aptを使用します。生成されたソースファイルの別の宛先が必要な場合は、次のようにタグで設定できます。

<plugin>
<groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <defaultOutputDirectory>apt_generated</defaultOutputDirectory>
                            <processors>
                                <processor>com.any.processor.invoker</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

-3

これが解決策です

  1. マーカービューを開く(ウィンドウ>ビューの表示)
  2. エラーメッセージを右クリック
  3. クイックフィックスを選択
  4. 完了をクリックします
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.