web-dev-qa-db-ja.com

M2EおよびMavenがEclipseソースフォルダとしてソースフォルダを生成した

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プラグインでこの問題の回避策/解決策を見つけられるかどうかを確認したいと思います。

88
Michael Wiles

ソースディレクトリを 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 を参照)
103
Michael-O

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

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

問題ビューでQuick Fixを選択し、Finishをクリックしてデフォルトを選択しますpdate project configuration。これで修正されます。

80
peter

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

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

https://apt-m2e.googlecode.com

4
Stefan Wo

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

この バグレポート も関連する場合があります。

3
Nicola Musatti

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

cxf-codegen-plugin自体にライフサイクルマッピングを追加するために、CXF JIRAでリクエスト( 1 を参照)。これにはm2e 1.1が必要になりますが、ライフサイクルマッピングAPIがcxf-codegen-pluginおよびcxfよりも頻繁に変更されないと仮定すると、cxfプロジェクトの外部でコネクタを構築するよりも優れたアプローチだと思います。

1

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

....

 <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にある場合、自動的に検出されます

お役に立てれば! 〜ワイルドビル

0
WildBill

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

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

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

0
Adam Gent

ディスカバリカタログで利用可能なbuildhelper m2eコネクタを使用することもできます。 Eclipse 3.7を使用しています

0
Cédric Vidal

Eclipse Java EE IDE Web開発者向け。バージョン:Juno Service Release 1

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

mvn clean install

完璧に動作します。

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

プロジェクトでF5を押すだけです。この問題を修正してください。

0
burtsevyg