6

継続的インテグレーション ジョブ (Hudson) を 2 つのステップに分割したいと考えています。(ビルドとレポートを一緒に実行すると時間がかかりすぎるためです。) 最初のジョブで、「mvn パッケージ」を使用してマルチ モジュール Maven プロジェクトを正常にビルドしました。次に、自分のワークスペースを別の場所にコピーし、目標 "site" および/または findbugs/checkstyle/pmd のみを使用してプロジェクトを再度ビルドして、レポートを作成しようとします。しかし、これはうまくいきません!Mavenがサブモジュールの依存関係を解決できません。(ただし、すべての JAR はそのターゲット フォルダーで利用できます。)

例: 私の構造は次のようになります。

    • B
    • C
    • D

プロジェクト C は、依存プロジェクト B として持っています。

「mvn サイト」ですべてをビルドすると、プロジェクト A と B のすべてのレポートが生成されます。しかし、プロジェクト C で停止し、「プロジェクト B の依存関係を解決できませんでした」というエラー メッセージが表示されました。しかし、プロジェクトBはすでに「mvn package」でビルドされています。つまり、プロジェクト B の JAR ファイルはそのターゲット フォルダーにあります。

「mvn install」なしでサブモジュール B から依存関係を解決する方法はありますか? (私は自分の ci サーバーでこれを実行したくありません。同じコード ベースを持つ他のジョブにとって危険である可能性があるのではないかと心配しています。)

2012 年 8 月 20 日更新:

ルート フォルダーの POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <name>Foo</name>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <modules>
        <module>parent</module>
    </modules>
</project>

親 POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <name>Foo</name>
    <groupId>foo</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <modules>
        <module>../bar-a</module>
        <module>../bar-b</module>
        <module>../bar-c</module>
        <module>../bar-d</module>
    </modules>
    [...]
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>2.5.1</version>
                [...]
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>2.7.1</version>
                [...]
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.9.1</version>            
                [...]
            </plugin>
        </plugins>
    </reporting>
</project>

BのPOM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>foo</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
        <relativePath>../parent</relativePath>
    </parent>
    <name>Bar B</name>
    <artifactId>bar-b</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>  
    [...]
</project>

CのPOM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>foo</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
        <relativePath>../parent</relativePath>
    </parent>
    <name>Bar C</name>
    <artifactId>bar-c</artifactId>
    <packaging>jar</packaging>
    [...]
    <dependencies>
        <dependency>
            <groupId>foo</groupId>
            <artifactId>bar-b</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
    [...]
</project>
4

1 に答える 1

1

私はまったく同じ「長い間」の問題に直面していました。

あなたが提案したように、あなたのやり方でそれを解決する唯一の方法(私は思う)は、実際には mvn install です。

しかし、実際の問題は、ワークスペースをコピーしてさまざまな動作をしようとする方法にあります。代わりに、CI は必要に応じて (コミットごとまたは 1 時間ごとに) ビルドおよびテストしますが、レポートは 1 回だけ (たとえば、深夜ごと) にすることを考慮する必要があります。継続的なビルドを高速化し、夜間にドキュメントとレポートを修正することができます。

これが私たちのやり方であり、それで十分です。そのためにjenkinsを使用していますが、すべてのCIソフトでトリガーできると思います) !

@hourly : mvn clean package (or install) --> from 1 to 5 minutes to run all test on all modules
@daily : mvn clean install site -->  from 15 to 35 minutes to run all test on all modules + doc + reports + PDF reports

プロファイルを使用してさまざまな動作をトリガーすることもできますが、これはそのような基本的な用途には洗練されすぎています。

于 2012-08-18T17:17:06.180 に答える