2011-12-05 21 views
2

いくつかのクラスを生成するAntビルドスクリプトがあります。このプロセスには外部ライブラリが必要です。私は多くの異なるモジュールでこの作業が必要なので、毎回libをコピーしたくないので、すべての開発者にlibを最初にダウンロードさせる必要があるので、私はそれをlocalyとして参照したくありません。 外部リソースを参照して含めるにはどうすればよいですか? これは、これまでAntビルドタスクに外部リソースを含める

<project name="generate" basedir="."> 

    <property name="src" location="src/main/java"/> 
    <property name="generated" location="target/classes"/> 
    <property name="build" location="src/main/java"/> 

    <path id="cp"> 
     <fileset dir="path/to/lib" includes="**/querydsl-jpa-2.2.3-apt-one-jar.jar"/> 
    <fileset dir="path/to/.m2" includes="**/*.jar"/> 
    </path> 


    <target name="compile" > 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac srcdir="${src}" classpathref="cp" includeantruntime="false"> 
     <compilerarg value="-proc:only"/>  
     <compilerarg value="-processor"/> 
     <compilerarg value="com.mysema.query.apt.QuerydslAnnotationProcessor"/> 
     <compilerarg value="-s"/> 
     <compilerarg value="${generated}"/> 
    </javac> 

    <!-- compilation --> 
    <javac classpathref="cp" destdir="${build}" includeantruntime="false">  
     <src path="${src}"/> 
     <src path="${generated}"/> 
    </javac> 
    </target> 

</project> 

私のセットアップである今、私はいくつかの遠隔地でquerydsl-jpa-2.2.3-apt-one-jar.jarを持っていると私はまた、代わりにローカル.m2ディレクトリの社内のMavenリポジトリを参照するようにしたいので、私は、リモートの場所を参照する必要があり、含まそこからの図書館。

答えて

1

Apache ivy ANTプラグインを使用することをお勧めします。これは、2つの方法であなたを助けることができる:

  1. アイビーは、あなたのライブラリがMaven Central(あなた自身のウェブサイト上でそれを格納する必要はありません)からすでに利用可能であるMaven
  2. と同じようにライブラリをダウンロードすることができ

  • $ HOME/.ant/libに
  • 012:あなたのプロジェクトを使用して

    開発者だけで、次のいずれかの場所にインストールツタの瓶が必要になります

  • $ ANT_HOME/libに

のbuild.xml

アイビー解決タスクのダウンロード(およびキャッシュ)(ivy.xmlファイルで見つかった)依存性。 cachepathタスクは自動的にクラスパスを取り込みます

<project name="generate" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> 

    <property name="src" location="src/main/java"/> 
    <property name="generated" location="target/classes"/> 
    <property name="build" location="src/main/java"/> 

    <target name="resolve" > 
     <ivy:resolve/> 
     <ivy:cachepath pathid="cp" conf="compile"/> 
    </target> 

    <target name="compile" depends="resolve"> 
    .. 

ivy.xml

依存関係をここで宣言されています

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra"> 

    <info organisation="com.myspotontheweb" module="demo"/> 

    <configurations defaultconfmapping="compile->default"/> 

    <dependencies> 
     <!-- Your jar --> 
     <dependency org="com.mysema.querydsl" name="querydsl-jpa" rev="2.2.3" > 
      <artifact name="querydsl-jpa" type="jar" m:classifier="apt-one-jar"/> 
     </dependency> 

     <!-- Other Maven dependencies --> 
     <dependency org="commons-lang" name="commons-lang" rev="2.6"/> 
     .. 

    </dependencies> 

</ivy-module> 

querydsl-JPA-2.2.3-のapt-ワンjar.jar jarは特別です。追加のclassifier仕様が必要です。それはMavenのだった場合は、次のようにそれが宣言されます依存関係:

<dependency> 
    <groupId>com.mysema.querydsl</groupId> 
    <artifactId>querydsl-jpa</artifactId> 
    <version>2.2.3</version> 
    <classifier>apt-one-jar</classifier> 
</dependency> 

はivysettings.xml

アイビー(ジャストMavenのクライアントのように)あなたのMavenのリポジトリを使用するように設定することができます。

<ivysettings> 
    <settings defaultResolver="maven-repo"/> 
    <resolvers> 
     <ibiblio name="maven-repo" m2compatible="true" root="http://myrepo.mycompany.com/maven-central-proxy"/> 
    </resolvers> 
</ivysettings> 
+0

昨日あなたの答えに気付かなかったので、今私たちの状況の回避策があります。しかし、おそらく、我々はそれを考え直さなければならないでしょう.. あなたの答えは良い、おかげ! (私は、必要なローカル設定の量があまり好きではありませんが、特にivysettingsを設定する必要があります)。 どこにivy.xmlを配置しますか? build.xmlと同じレベルですか? – Pete

+0

ivy.xmlはデフォルトでbuild.xmlと同じディレクトリにあります。 Mavenも2つのファイルを使用します.1つはプロジェクトの依存関係、もう1つは環境設定です。 –

関連する問題