1

複数のプラットフォーム (Mac および Windows) で NAR を構築しています。ビルドは複雑で、Maven NAR プラグイン自体を介して実行することはできませんが、nar ファイルを自分でビルドし、mvnデプロイ用のコマンドライン ツールを使用しています。

展開を行う一般的な方法は、一発です。

mvn deploy:deploy-file \
    -Dfile=foobar.jar \
    -Dpackaging=jar \
    -Dfiles=foobar-x86_64-MacOSX-gcc-shared.nar,foobar-x86_64-Windows-MSVC-shared.nar \
    -Dclassifiers=x86_64-MacOSX-gcc-shared,x86_64-Windows-MSVC-shared \
    -Dtypes=nar,nar \
    -DgroupId=com.example \
    -DartifactId=foobar \
    -Dversion=1.0.0-SNAPSHOT \
    -Durl=$URL \
    -DrepositoryId=nexus 

ただし、ビルドは異なるボックスで実行されているため、公開手順を一度に行うことはできません。理想的には、ビルドが終了したときに、添付ファイルをプライマリ アーティファクトに「追加」できるようにしたいと考えています。すなわち、

これを 1 回実行します。

mvn deploy:deploy-file \
    -Dfile=foobar.jar \
    -Dpackaging=jar \
    -DgroupId=com.example \
    -DartifactId=foobar \
    -Dversion=1.0.0-SNAPSHOT \
    -Durl=$URL \
    -DrepositoryId=nexus 

次に、Mac ビルド スレーブで次のようにします。

mvn deploy:deploy-file \
    -Dfiles=foobar-x86_64-MacOSX-gcc-shared.nar \
    -Dclassifiers=x86_64-MacOSX-gcc-shared \
    -Dtypes=nar \
    -DgroupId=com.example \
    -DartifactId=foobar \
    -Dversion=1.0.0-SNAPSHOT \
    -Durl=$URL \
    -DrepositoryId=nexus 

次に、Windows ビルド スレーブで:

mvn deploy:deploy-file \
    -Dfiles=foobar-x86_64-Windows-MSVC-shared.nar \
    -Dclassifiers=x86_64-Windows-MSVC-shared \
    -Dtypes=nar \
    -DgroupId=com.example \
    -DartifactId=foobar \
    -Dversion=1.0.0-SNAPSHOT \
    -Durl=$URL \
    -DrepositoryId=nexus 

もちろん、最初のコマンドは問題なく動作します。しかし、2 つのビルド スレーブ コマンドは失敗します。

The parameters 'file' for goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file are missing or invalid

プライマリ アーティファクトが必要であると考えているためです。

完全に新しいものを作成するのではなく、パブリケーションに追加していることをどのように指定できますか?

4

1 に答える 1

2

ビルドはさまざまなボックスで実行されているため、公開の手順を 1 回で実行することはできません。

Jenkins などの CI サーバーを使用してビルドを実行している場合は、各スレーブから成果物を公開し、マスター ノードのダウンストリーム ジョブを介してそれらにアクセスできます。

これが、 ImageJプロジェクトの問題を解決する方法です。Jenkinsですべてのビルド アーティファクトを集約し、それらを一度にデプロイします。最初に、ImageJ ランチャージョブ (マルチ構成プロジェクト) が適切なスレーブを使用してコードをビルドし、関連するアーティファクトをアーカイブします (マスター ノードのファイル システムに転送します)。次に、ImageJ-launcher-deployジョブは、アーカイブされたアーティファクトを各構成から 1 つのディレクトリにコピーして、一度にデプロイできるようにします。

ImageJ-launcher-deploy参考までに、NAR アーティファクトを 1 か所にコピーするシェル スクリプトの一部を次に示します。

masterDir=workspace/label/master/target &&
axesDirs=configurations/axis-label/*/builds/$buildNumber/archive/target &&
: copy the nar/**/* files from all axes to master &&
for path in $axesDirs/nar/*/bin/*/*
do
        file=${path#$axesDirs/} &&
        if test -f $masterDir/$file
        then
                # we ignore everything except Linux in the master
                case "$path" in
                */master/*Linux*)
                        ;;
                */master/*)
                        continue
                        ;;
                esac

                cmp $path $masterDir/$file && continue
                printf 'Artifacts disagree:\n%s\n%s\n\n' $path $masterDir/$file
                errors=$(($errors+1))
        else
                target=$masterDir/$file &&
                mkdir -p ${target%/*} &&
                cp $path $target
        fi
done

さまざまなディレクトリにあるファイルのリストをサポートしている場合は、アーティファクトをコピーする必要さえないかもしれません。ループ内-Dfilesでファイルのリストを構築し、上記の呼び出しで終了するだけです。formvn deploy:deploy-file

ImageJ-launcher Jenkins 構成の詳細については、この回答も参照してください。

于 2014-10-28T19:47:59.283 に答える