1

イントロ: Apache Antの経験がないので、試して失敗してイライラする前に、これを尋ねています。単純な「はい、これでうまくいきます」で十分かもしれません。そうでない場合は、どうなるか教えてください。

状況: JavaFXを使用してGUIを作成するプロジェクトに取り組んでいます。JavaFXは、そのプロパティに多くの定型コードを必要とするJavaBeanのようなオブジェクトに依存しています。たとえば、必要なすべての機能は、デフォルト値が「Unnamed」のnameという文字列、または最小限のJava構文です。

String name = "Unnamed";

JavaFXでは、同じ機能を提供するためにコードの最小量が大幅に増加します(この場合の機能とは、プログラムで使用する特定の変数を設定および取得できることを意味します)。

private StringProperty name = new StringProperty("Unnamed");
public final String getName() { return name.get(); }
public final void setName(String value) { name.set(value); }

質問: Antを使用してこの定型コードを生成できますか?

(Java)プリプロセッサとして機能するAntスクリプトを作成することは可能のようです。たとえば、regex replace(https://ant.apache.org/manual/Tasks/replaceregexp.html)関数を使用します。私は自分のコードでこれに似たコード行を考えています。これは自動置換されます。

<TagToSignifyReplaceableLine> StringProperty person "Unnamed"

最後に、前にも言ったように、Antを使ったことがないので、1)これができるか、2)これが良い方法か、それとももっと良い方法があるかを確認したいと思います。

ありがとう!

4

4 に答える 4

0

はい、できます:-)

私はかつて、WSDLドキュメント(SOAPベースのWebサービスを記述したXMLファイル)を使用して、製品への機能インターフェイスを実装するPOJOJavaクラスを生成するWebサービスアダプターを作成しました。私がこれを行うようになったのは、私たちのプロプライエタリシステムと通信するために必要な、無意識に繰り返されるJavaコードでした。

技術的なソリューションでは、XSLTスタイルシートを使用して、入力XMLドキュメントを出力Javaテキストファイルに変換し、その後ANTによってコンパイルされました。

<!-- Generate the implementation classes -->
<xslt force="true" style="${resources.dir}/javaServiceStub.xsl" in="${src.dir}/DemoService.wsdl" out="${build.dir}/DemoService/src/com/myspotontheweb/DemoServiceSkeleton.java" classpathref="project.path">
    <param name="package" expression="com.myspotontheweb"/>
    ..
    ..
</xslt> 

残念ながら、XSLTは、ネイティブANTでサポートされているテンプレートエンジンに最も近いものです。

頑張ってください!

于 2012-11-13T18:49:12.447 に答える
0

私の前の会社がJavaでモデルオブジェクトを生成するためにantを使用したので、それができることを私は知っています。

彼らが使用したアプローチは、XMLファイルでモデルオブジェクトを定義し、antタスクを実行してpojoとdtoを生成することでした。

私はすぐにグーグルで検索し、XMLからJavaを生成できるツールがあることを知りました。おそらく、スキーマ/デフォルト値などをXMLで指定し、ツールを実行するためのntタスクを設定できます。

于 2012-11-13T13:03:42.990 に答える
0

はい、可能です。この仕事を非常に簡単に行う独自のAntタスクを実装することもできます。

アリのようなもの:

<taskdef name="codegen" classpath="bin/" classname="com.example.CodeGen" />

その後

<codegen className="Test.java">
   <Property name="StringProperty.name" value="Unnamed"/>
</codegen>

次に、CodeGen.javaは次のようになります。

public class CodeGen extends Task {
    private String className = null;
    private List properties = new ArrayList();

    public void setClassName(String className) {
        this.className = className;
    }

    /**
     * Called by ant for every &lt;property&gt; tag of the task.
     *  
     * @param property The property.
     */
    public void addConfiguredProperty(Property property) {
      properties.add(property);
    }

    public void execute() throws BuildException {
        // here we go!
    }

}
于 2012-11-13T13:18:22.087 に答える
0

私はJSR-269を具体的に見ていきます: JSR-269をより簡単にするgenftw ...

そして、はい、プラグインを作成しなくてもAntで動作し、脆弱な正規表現よりもうまく機能します。

あなたが本当に冒険しているなら、他のオプションはコード生成のためにXTextをチェックアウトすることですが、それはかなり複雑です。

于 2012-11-13T13:33:16.480 に答える