5

ビルドを Ant から Maven に移行中です。「コード ジェネレーター」をコンパイルするために使用される Ant ビルドは、Java および C コードのセットを生成するこの「コード ジェネレーター」を実行します。次に、生成された Java コードを取得し、いくつかの追加コードとともにコンパイルして、単一の jar を生成します。

これをMavenで簡単に複製しました。コマンドラインから実行するとうまく機能しますが、Eclipseは文句を言い、pomファイルに関連するエラーを私に与えています

{group.id}:{artifact.id}:pom:1.0.0-SNAPSHOT が http://{内部サイト リポジトリ}/nexus/content/groups/public で見つかりませんでした。ローカル リポジトリにキャッシュされました。スナップショットの更新間隔が経過するか更新が強制されるまで再試行しない

group.id と artifact.id は、コード ジェネレーター プラグインのグループ ID とアーティファクト ID です。

また、生成されたコードを参照するコードもコンパイルに失敗します。

私のmavenビルドはで構成されています

  • コード ジェネレーターの Java コードのみを含むジェネレーター プロジェクト。

  • ジェネレーターを Maven プラグインとしてラップするコードのみを含むジェネレーター プラグイン プロジェクト。これは、ジェネレータ プロジェクトに依存します。

  • プラグインを使用してコードを生成する xyz プロジェクト。コードは、このプロジェクトの target/generated-sources/xxx フォルダーに配置されます。この追加のソース ディレクトリを含めるために、複数の src ディレクトリを使用して Maven コンパイルに従って build-helper-maven-plugin を構成しました。

生成されたソース フォルダーを手動で Eclipse ビルド パスに追加すると、そこにないコードに関連するすべてのエラーがそのプロジェクトでは消えますが、ダウンストリーム プロジェクトでは消えず、上記の "Failure to find..." エラーは残ります。

私を少し困惑させているのは、実際にはジェネレータープラグインが maven プラグインとして定義されているのに ...:pom:1.0.0-SNAPSHOT を参照していることです。

これは賢明なアプローチですか?

「Failure to find...」エラーが表示されるのはなぜですか?

Eclipse が生成されたソース フォルダーを取得しないのはなぜですか?

また、Eclipse IDE に m2e プラグインと build-help-maven-plugin 用の m2e コネクタがインストールされていることも忘れてはなりません。

4

2 に答える 2

0

eclipse Indigo3.7 を使用すると、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>projName</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 にある場合、自動的に検出されます

お役に立てれば!

于 2013-05-01T20:01:19.117 に答える
0

リポジトリからのライブラリのダウンロード中に問題が発生したようです。私はすでに同じエラーメッセージを一度持っていました。

  • ローカル リポジトリを確認しましたか?

    .m2 フォルダーに移動して、 を探します/nexus/content/groups/public。フォルダーが存在する場合は、それを開いて、lib が正しくダウンロードされているかどうかを確認します。mvn installそうでない場合は、フォルダーを削除して実行し、lib を強制的にダウンロードして みてください。

    Eclipse でも実行しRight button > Maven > Update Projectます。

  • Artifactory のようなローカル リポジトリを使用していませんか? repo1-cacheまた、 (または同様の)フォルダーで lib を探します。瓶があるかどうかを確認します。

  • ファイアウォールまたはプロキシの背後にいますか?

于 2013-03-26T17:24:37.543 に答える