最初の簡単な答え:
カスタムプラグインは本当に必要ですか? 変数は${basedir}
、アーキタイプが実行されたベース ディレクトリに対応するアーキタイプ リソース ファイルで機能する必要があります。
ターゲット プロジェクトのルートは ${basedir}/${artifactId} であるため、テンプレートpom.xml
が次の場合:
<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>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>jar</packaging>
<name>A custom project at base ${basedir}/${artifactId}</name>
</project>
次に、生成されたアーキタイプは次のpom.xml
ようになります。
<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>
<groupId>galah</groupId>
<artifactId>galah-artifact</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>A custom project at base /home/prunge/java/testing/galah-artifact</name>
</project>
(コマンドライン/プロンプトから groupId、artifactId、バージョンを設定すると仮定)
しかしここで、プロジェクトのベース ディレクトリだけでなく、別の理由でこれらの環境変数が必要であると仮定しましょう。
私が知る限り、property-setter-maven-plugin
は現在の実行プロパティを取得し、それらを環境変数に入れます。そして、ベースディレクトリが必要です
property-setter-maven-plugin を実行するには、変更が必要です。元のプラグインでは、メタデータで定義されているようにプロジェクト/POM を実行する必要があるためです。
元のMOJOの定義:
/**
* @goal set-properties
* @phase validate
* @since 0.1
*/
public class PropertySetterMojo extends AbstractMojo
{
/**
* @parameter default-value="${project}"
* @parameter required
* @readonly
*/
private MavenProject project;
/**
* @parameter expression="${session}"
* @readonly
*/
private MavenSession session;
/**
* @parameter expression="${mojoExecution}"
* @readonly
* @required
*/
protected MojoExecution execution;
...
}
このプラグインをプロジェクトなしで実行できるようにするには、いくつかの変更が必要です。
- 、
@requiresProject false
これはデフォルトで true であるためです。追加のドキュメントはこちらです。
project
type のフィールドがありMavenProject
、それは - としてマークされてい@parameter required
ます - MOJO がプロジェクトなしで実行できるように、これを削除する必要があります。元の投稿のソース コードをざっと見てみると、このフィールドは使用されていないため、安全に削除できます。
したがって、次のような結果になります。
/**
* @goal set-properties
* @phase validate
* @since 0.1
* @requiresProject false
*/
public class PropertySetterMojo extends AbstractMojo
{
/**
* @parameter expression="${session}"
* @readonly
*/
private MavenSession session;
/**
* @parameter expression="${mojoExecution}"
* @readonly
* @required
*/
protected MojoExecution execution;
...
}
その後、以前と同じようにコマンド ラインを実行できます。
mvn \
com.example.build.maven:property-setter-maven-plugin:0.1:set-properties \
archetype:generate \
-DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=...
property-setter-maven-plugin はすぐに実行できるはずです。