私はMavenのアーキタイプを作ることに興味があり、私は基本の大部分を失ってしまったと思います。しかし、私が固執していることの1つは、テンプレートを記入するためにカスタムロジックを使用することが時々あるということです。たとえば、誰かが私のアーキタイプを生成し、artifactIdをhello-worldとして指定した場合、単にHello Worldという名前のクラスを生成したいと思います。コンソールに接続します。別の人がartifactId = howdy-thereでそれを生成すると、gennedクラスはHowdyThereになり、 "Howdy There!"が出力されます。Mavenアーキタイプでカスタムロジックを提供するにはどうすればよいですか?
MavenのアーキタイプメカニズムはVelocity Template Engineを利用していることがわかりましたので、この記事をcreating custom directivesで読んでいます。これは私が探していたものと思われたので、org.apache.velocity.runtime.directive.Directiveを拡張したHyphenatedToCamelCaseDirectiveというクラスを作成しました。そのクラスでは、私のgetName()実装は "hyphenatedCamelCase"を返します。私の原型-のmetadata.xmlファイルでは、私は以下を持っている...
<requiredProperties>
<requiredProperty key="userdirective">
<defaultValue>com.jlarge.HyphenatedToCamelCaseDirective</defaultValue>
</requiredProperty>
</requiredProperties>
マイテンプレートクラスは、私は私の原型をインストールして原型を行う
package ${package};
public class #hyphenatedToCamelCase('$artifactId') {
// userdirective = $userdirective
public static void main(String[] args) {
System.out.println("#hyphenatedToCamelCase('$artifactId')"));
}
}
後...次のようになります。ハウディ-そこたartifactId =とのgroupId = f1.f2を指定することによって発生する、結果のクラスは、このようになります...
package f1.f2;
public class #hyphenatedToCamelCase('howdy-there') {
// userdirective = com.jlarge.HyphenatedToCamelCaseDirective
public static void main(String[] args) {
System.out.println("#hyphenatedToCamelCase('howdy-there')"));
}
}
結果にもかかわらずuserdirectiveが、私はそれが期待されるように設定されていることを示し、そうではありません#hyphenatedToCamelCaseディレクティブをevaulatingしていました。ディレクティブクラスでは、レンダリングメソッドがSystem.outにメッセージをロギングしていますが、そのメッセージはコンソールに表示されません。そのため、archetype:generateの間にメソッドが実行されたことはありません。
ここでは単純なものがありませんか、またはこの方法はちょうど行く方法ではありませんか?