1

統合テスト段階で特定のファイル セットにアクセスする必要がある Maven ビルドがあります。これらのファイルは URL から zip ファイルとしてダウンロードされ (実際には Jenkins アーティファクトです)、統合テストを開始する前に解凍する必要があります。zip ファイルは 1 日に 1 回 (Jenkins ジョブの実行時) しか更新されず、多くの場合、それよりもめったに更新されません。zip ファイルはかなり大きく (500MB)、解凍にはかなりの時間がかかります (~10 分)。そのため、ダウンロードと解凍は、zip ファイルが更新されたときにのみ行う必要があります。

これを行う最初の試みは、統合テスト前の段階で ant スクリプトを呼び出してローカル ディレクトリにダウンロード/展開する Maven モジュールを作成することでしたが、依存関係を正しく設定する方法がわかりません。他のテストが実行される前に実行されます。

ファイルを保存するための別のリポジトリを設定する必要なく、これを行う最も簡単な方法は何ですか?

4

2 に答える 2

1

必要なことを行うMaven Dependency Pluginの使用を検討する必要があります。

最初に、会社のリポジトリまたは独自のローカル リポジトリから zip ファイルにアクセスできることを確認してください。こちらを参照してください。これを発行して、Eclipse zipファイルで試しました:

$> mvn install:install-file -Dfile=eclipse-jee-indigo-SR1-win32-x86_64.zip -DgroupId=eclipse -DartifactId=eclipse -Dversion=1.0-SNAPSHOT -Dpackaging=zip

これで、maven から簡単に zip ファイルにアクセスできるようになりました。次に、これらのファイルをアンパックする必要がある場所にこれらの行を追加しますpom.xml(新しくアップロードした Eclipse アーティファクトを使用しましたが、簡単に置き換えることができます)。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>eclipse</groupId>
                                <artifactId>eclipse</artifactId>
                                <version>1.0-SNAPSHOT</version>
                                <type>zip</type>
                            </artifactItem>
                        </artifactItems>
                        <includes>**/*.ini</includes>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<phase/>、いつアンパックを実行する必要があるかを示します。

タグはオプションであり、<includes/>表示したいものです。その後、zip全体が解凍されず、時間が大幅に短縮されます.

解凍は、zip が変更された場合にのみ実行されるようになり、それが実現したかったことです。

于 2012-06-13T08:36:31.880 に答える
0

ZIP ファイルが Maven の依存関係として利用できる場合は、次のようなことができると思います。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpacking</id>
        <phase>initialize</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>org.your.group.to.zip</groupId>
              <artifactId>the-zip</artifactId>
              <version>1-SNAPSHOT</version>
              <type>zip</type>
              <overWrite>false</overWrite>
              <outputDirectory>src/main/resources/something</outputDirectory>
              <excludes>*/somePath/**, */someOtherPath/**, **/pom.xml</excludes>
            </artifactItem>
          </artifactItems>
          <!-- Do not store markers in target so that they survive a mvn clean -->
          <markersDirectory>src/main/resources/markers/</markersDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

ターゲットとは異なるディレクトリにマーカーを保存すると、mvn clean 中にマーカーが削除されるのを防ぐことができます。したがって、ZIP が実際に変更されたときにのみ、展開全体を実行する必要があります。

上記の構成があなたのニーズに正確に適合するかどうかは 100% 確信が持てませんが、一般的な考え方は多少の調整でうまくいくはずです。特にこれとドキュメントのこの部分を参照してください。

于 2012-06-13T08:39:22.803 に答える