1

良い時間!

私たちのチームは Maven を使用しています。プロジェクト モジュールの 1 つにプラグイン (maven-jibx-plugin) があり、(このユース ケースでは) 独自の jar への依存関係が必要です。

        <plugin>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-maven-plugin</artifactId>
            <version>${jibx.version}</version>
            <executions>
                <execution>
                    <id>main-schemas</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>schema-codegen</goal>
                    </goals>
                    <configuration>
                        <schemaLocation>
                            ...
                        </schemaLocation>
                        <includeSchemas>
                            ...
                        </includeSchemas>
                        <customizations>
                            <customization>${basedir}/src/main/resources/customizations/customization.xml
                            </customization>
                        </customizations>
                        <verbose>true</verbose>
                    </configuration>
                </execution>
                <execution>
                    <id>bind</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>bind</goal>
                    </goals>
                    <configuration>
                        <schemaBindingDirectory>
                            ${basedir}/src/main/resources/bindings
                        </schemaBindingDirectory>
                        <includeSchemaBindings>
                            <includeSchemaBinding>*.xml</includeSchemaBinding>
                        </includeSchemaBindings>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>${project.parent.groupId}</groupId>
                    <artifactId>proprietary-jar</artifactId>
                    <version>${project.parent.version}</version>
                </dependency>
            </dependencies>
        </plugin>

問題は、プロジェクトをローカルでビルドすると (ジェンキンがインストールされているリモート マシンのコマンド ラインからでも)、すべてが正常にビルドされますが、ジェンキン インスタンスがビルドを試みると、次のようなメッセージが表示されてビルドが失敗することですUnable to find class 'class-name-from-the-proprietary-jar'。 . この問題は、プラグインの依存関係を追加する前にローカルで発生しました..

プラグインの依存関係を解決しない jenkins maven プラグインの機能がいくつかあるようです。または、jenkins maven プラグインのクラスローディングのよく知られた機能がある可能性があります (JiBX は、そのような構成で独自のクラスをロードしますSchemaRootBase.class.getClassLoader().loadClass(cname):プラグインは、必要なクラスに関する知識を提供する必要があります)...誰かが回避策を提案できますか?

更新: jenkins インスタンスの JAVA_HOME 変数が に設定されていることが判明しました/usr/java/jdk1.7.0_25が、私の maven-compiler-plugin には<target>1.6</target>. 問題は1.7 Javaバージョンにあるのでしょうか?

4

2 に答える 2

1

さて、ついに私は答えを見つけました!問題は実際には Jenkins ではなく、Maven 自体にあります。

注意: 進行中の情報は、Maven 2 に対してのみテストされています。

マルチモジュール プロジェクトがあり、いくつかのモジュールが同じプラグインを (異なる依存関係で) 使用している場合、Maven は最初のプラグインの依存関係セットを取得することが判明しました(つまり、プラグインは Maven がビルドする最初のモジュールにあり、このプラグイン) を使用し、ローカル値によって依存関係をオーバーライドしない他のプラグインに使用します。

これを明確にするために、例を挙げてみましょう。Maven ビルドに A と B の 2 つのモジュールがあるとします。

<modules>
   <module>A</module>
   <module>B</module>
</modules>

モジュール A のpomファイルには次のようなコードがあります。

<plugin>
   <dependencies>
     <dependency>
        <groupId>com.c</groupId>
        <artifactId>D-module</artifactId>
        <version>1</version>
     </dependency>
   </dependencies>
   <groupId>org.jibx</groupId>
   <artifactId>jibx-maven-plugin</artifactId>
   <version>${jibx.version}</version>
</plugin>

モジュール B のpomファイルには次のようなコードがあります。

    <plugin>
       <dependencies>
         <dependency>
            <groupId>com.c</groupId>
            <artifactId>F-module</artifactId>
            <version>1</version>
         </dependency>
       </dependencies>
       <groupId>org.jibx</groupId>
       <artifactId>jibx-maven-plugin</artifactId>
       <version>${jibx.version}</version>
    </plugin>

Maven がモジュール B をビルドすると、F モジュールの依存関係を指定した場合でも、D モジュールの依存関係が使用されることがわかります。

私たちのプロジェクトでは、このような回避策を作成しました。プラグイン宣言をpluginManagementセクションの親pomに移動し、プラグインの D モジュールと F モジュールの依存関係を宣言しました (ローカルモジュールからこれらの依存関係も削除しました)。わかりました、コードはかなり醜いです (親のpomファイルに子の依存関係があります) が、これは機能します!

誰かがこの問題を共有し、それを克服できた場合は、解決策をアドバイスしてください。

于 2013-09-20T15:17:31.817 に答える
0

mvn clean installワークスペースで試す

次に、どこでも同じエラーが発生するはずです。また、Jenkins が使用しているのと同じコマンド ラインを使用してみてください (存在する場合)。

于 2013-09-11T11:42:21.223 に答える