6

いくつかのレガシー コードを maven プラグインに含めようとしています。レガシー コードは、その出力を OS の現在の作業ディレクトリに書き込んでいます。それをすべてターゲットディレクトリに移動したいと思います。つまり、プロジェクトのネストが

A
-B
-C

そして、B または C で mvn install を実行すると、B または C で出力が得られ、それらを B/target および C/target に移動したいと考えています。さらに悪いことに、A で mvn install を起動すると、B と C の両方の出力が A に巻き上げられ、明らかに非常に悪い (上書き) ことになります。

現在のプロジェクト フォルダー (mvn install が起動された場所ではない) を取得する方法を探しましたが、これまでのところ、これをすべてユーザーにプッシュする必要のないものは見つかりませんでした (コマンド ライン ハック、pom ハック、プロパティファイルなど)。レガシーを起動する前に作業ディレクトリを変更する方法も望んでいましたが、Java はそれを許可していません。では、どのように進めればよいでしょうか?

4

3 に答える 3

8

私自身の質問にもう一度答えるために(私にはよく起こります)、解決策はここから始まります:

/**
 * The maven project.
 * 
 * @parameter expression="${project}"
 * @readonly
 */
private MavenProject project;

次に、セットアップメソッドで:

this.model = project.getModel();
this.build = model.getBuild();
this.finalName = build.getFinalName();
this.targetDir = new File(build.getDirectory());

適切な場所を指すtargetDirを取得します。次に、レガシーコードが実行され、好きな場所にドットがドロップされ、プラグインがドットをターゲットディレクトリに移動してクリーンアップします。

それは初心者にとっては十分でした。しかし、targetDir が利用できるようになったので、実際にはレガシー コードを適切な場所で処理できるようにトイレ トレーニングを行うことになりました。

于 2012-12-24T20:52:34.853 に答える
8

簡単なメモ: 最新の Maven プラグインでは、代わりに注釈を使用できます。

@Parameter(readonly = true, defaultValue = "${project}")
private MavenProject project;
于 2016-05-30T13:10:39.080 に答える
0

アーティファクトがビルドされているディレクトリのみを取得したい場合は、これを行う方が少しきれいかもしれません:

/**
 * @parameter expression="${project.build.directory}/${project.build.finalName}"
 * @readonly
 */
private File outputPath;
于 2013-09-24T05:16:56.633 に答える