2012-01-08 3 views
2

私は現在JavaソフトウェアをビルドするためにAntを使用しています。条件付きチェックを行うのに十分柔軟なJavaビルドツール

しかし、私がこれまで行ってきた開発はあまり複雑ではありませんでした。だから、蟻は私のために十分だった。

最近、ビルド中に条件付きチェックが必要な複雑なプロジェクトに取り掛かりました。私はそれをAntと少し複雑にしています。

Antで条件チェックを行うより良い方法はありますか?または、もしあれば、より良いツールを私に提案してください。

PS:私はAnt Proではありません。だから、私は何かが足りないかもしれない。ですから、私がAntのいくつかの機能を欠いているかどうかをメトス状態にしてください。

+0

[Gradle](http://gradle.org/)を使用することもできます。 – Behrang

答えて

2

最新のビルド技術を採用する準備ができている場合は、ビルド技術をGradleまたはMavenに切り替えることをおすすめします。

一方、時折ビルドロジックを拡張する必要がある場合は、ビルド内にスクリプト言語を埋め込むという中間的な方法をお勧めします(私の意見では、ant-contribタスクを使用する方がよいでしょう)。

良い候補はgroovyで、これは親ANTビルド設定との優れた統合性を備えています。あなたが実行したい条件チェックの種類を示すものではありませんでした

(Groovyはまた、Gradleの背後にある技術です)。

次の例では、すべてのJavaソースファイルを解析し、「hello world」文字列の有無を確認します。 いつそれはANTプロパティを設定見出さsomethingwrong実行からビルドを防止。、ANTファイルセットと設定ANT特性を通して反復する方法グルービー

<target name="build-checks" depends="init"> 
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/> 

    <fileset id="srcFiles" dir="src/main/java" includes="**/*.java"/> 

    <groovy> 
    project.references.srcFiles.each { fileresource -> 
     fileresource.file.eachLine { line -> 
      if (line =~ /hello world/) { 
       properties["somethingwrong"] = 1 // Signal build to do nothing 

       println "Found \"hello world\" in the source code" 
      } 
     } 
    } 
    </groovy> 
</target> 

<target name="build" depends="build-checks" unless="somethingwrong"> 
    <echo message="everything ok"/> 
</target> 

注意。

+1

特定の例では+1ですが、Java 6を使用している場合は私の答えに記載されているように、javascriptはインタープリタの外部依存関係を取り乱す必要がないため、簡単です。 –

+0

ポイントを獲得しました。しかし、私はivyを使用してすべてのビルド依存関係をダウンロードしており、グルーヴィーANTタスクを含めるのは非常に苦労しています。私はまた、Javascriptの初心者のビット:-( –

3

ant-contribを使用してください。

それはまだ続い/ ELSE/IF、foreachの、変数(上書きすることができ、すなわち、性質)を持って、実際の正規表現のマッチングなど

をそれはかなり長い間更新されていないが、それ働くなぜ蟻にはこのような機能が組み込まれていないのですか?私は蟻のユーザーに何度も尋ねてきましたが、満足のいく答えはありませんでした。

+0

+1 ant-contribは、ポスターが条件スクリプトをビルドスクリプトに導入する最も簡単で簡単な方法です。 – Paul

0

複雑なプロジェクトを構築するには、Maven(http://maven.apache.org/)で調査する必要があります。

+1

mavenは条件付きの(ベース)antとまったく同じ問題を抱えています。簡単にはできません。 – fge

1

これが「あなたのお気に入りのビルドツールとは何か」の疑問にぶつかります。条件付きロジックを実行するための要件は、ビルドを調整するための適切なプログラミング言語が必要であることを示しています。このため、Groovy言語を使用してさまざまなAntおよびMavenスタイルのサブタスクを編成するGradleをお勧めします。

Ant-ContribおよびMaven ですが、それらは不器用で読みにくいですが。

1

私はant-contribをantの基本条件ロジックに使用します。ほとんどの場合、ツールの機能とプラグインによる新しい機能の追加が重要です。 Antには、新しいタスクを追加するのが比較的簡単なタスクが用意されています。

1

条件付きロジックをカプセル化するカスタムタスクを作成できます。これは、別の成果物をコンパイルして結果のクラスパス混乱に対処する必要がないので、<scriptdef>(Java 6とその組み込みのJavaScriptインタプリタではさらに簡単です)を使用するとかなり簡単です。

あなたはプロではないと言いました。カスタムタスクを作成するのは難しくありませんが、いくつかの経験が必要です。

他にもgradleがあります。私はgradleにも興味がありますが、業界は依然としてAntとMavenを支持しています。あなたのプロジェクト(または会社)の制約に応じて、時々あなたは流れに行く必要があります。

ant-contribは可能な解決策ですが、私はそれが死んだプロジェクトだと言える限り、何年も更新されていません。それが追加するツールの中には、Antのより新しいバージョンでは、単に時代遅れで、危険でさえあります。そして、私はXMLの条件付きコードが読みづらいと気付きました。

Flakaを参照してください。これは、他の多くの機能に加えて、Flakaでは純粋なAntでできることをはるかに超える条件付きロジックを実行できるように、Antに式言語アドオンを提供します。

+0

"Java 6とそのビルトインJavascriptインタプリタ" < - Eh?興味ある。リンク? – fge

+0

ここ:http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html。 はAntでしばらく働いていましたが、SunがJava 6にjavascriptサポートを追加したときに、はるかに簡単になりました。 –

+0

このリンクは、javax.scriptingパッケージに関するものです。ビルトインのRhinoインタプリタについては、次のとおりです。http://onjava.com/onjava/2006/04/26/mustang-meets-rhino-java-se-6-scripting.html –