は、ソースからのjarファイルを構築し、すべての非Javaリソースを含み、最小限のbuild.xmlフラグメントを考えてみましょうアリ複数のソースディレクトリが
上記のスクリプトを修正するにはどうすればよいですか? javac
はうれしくディレクトリのリストを取得しますが、コピーするためには、文字列を除外してファイルセットのリストに変換するか、別の方法で見つける必要があります。
は、ソースからのjarファイルを構築し、すべての非Javaリソースを含み、最小限のbuild.xmlフラグメントを考えてみましょうアリ複数のソースディレクトリが
上記のスクリプトを修正するにはどうすればよいですか? javac
はうれしくディレクトリのリストを取得しますが、コピーするためには、文字列を除外してファイルセットのリストに変換するか、別の方法で見つける必要があります。
私は組み込みのAntタスクでそれを行う方法のか分からないが、あなたは簡単な解決策は、ちょうど同じ方法で、複数のファイルセットを指定することですant-contrib <for>
task
<path id="src.path">
<pathelement location="src" />
<pathelement location="src-gen" />
</path>
<target name="build">
<javac destdir="bin">
<src refid="src.path" />
</javac>
<for param="dir">
<path refid="src.path" />
<sequential>
<copy includeemptydirs="false" todir="bin">
<fileset dir="@{dir}">
<exclude name="**/*.java" />
</fileset>
</copy>
</sequential>
</for>
<jar destfile="dist/foo.jar" basedir="bin"/>
</target>
通常は、単に一緒にそれらをすべてリスト:
<javac destdir="bin">
<src path="${src.dir}"/>
<src path="${src2.dir}"/>
<src path="${src3.dir}"/>
</javac>
あなたは<sourcepath/>
属性を試すことができます。私はそれを使ったことがないが、私は、さまざまなソースファイルのパスを定義するためにそれを使用し、それを使用することができると信じて:第二わから
<path id="source.path">
<pathelement path="${src.dir}"/>
<pathelement path="${src2.dir}"/>
<pathelement path="${src4.dir}"/>
</path>
<javac destdir="bin">
srcpathref="source.path"/>
最初の意志の仕事ではなく、100%。
「javac」はリストを直接受け入れるので簡単です。私の問題は 'copy'タスクです。 –
を使用することができます当然の
<target name="build" depends="init" description="Create the package">
<javac destdir="${classes.dir}" includeantruntime="false">
<src path="src/main1/java"/>
<src path="src/main2/java"/>
</javac>
<copy todir="${classes.dir}" includeemptydirs="false">
<fileset dir="src/main1" excludes="**/*.java"/>
<fileset dir="src/main2" excludes="**/*.java"/>
<flattenmapper/>
</copy>
</target>
これは期待するのは不合理ではないである、ソースコードの場所の数が固定されていることを前提としています。javacタスクの属性、複数の「SRC」をサポートしています
リストプロパティを使用して、これをドライブしたい場合は、(私はアリ-contribのを推奨するものではありません)、このリストを処理するために、ビルド内のスクリプトを埋め込むに頼らなければなりません。
<project name="demo" default="build">
<property name="src.dirs" value="src/main1,src/main2"/>
<property name="build.dir" location="build"/>
<property name="classes.dir" location="${build.dir}/classes"/>
<target name="bootstrap">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.6/groovy-all-2.1.6.jar"/>
</target>
<target name="init">
<mkdir dir="${classes.dir}"/>
</target>
<target name="build" depends="init" description="Create the package">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<groovy>
def srcDirs = properties["src.dirs"].split(",")
ant.javac(destdir:properties["classes.dir"], includeantruntime:false) {
srcDirs.each {
src(path:"${it}/java")
}
}
ant.copy(todir:properties["classes.dir"], includeemptydirs:false) {
srcDirs.each {
fileset(dir:it, excludes:"**/*.java")
}
flattenmapper()
}
</groovy>
</target>
<target name="clean" description="Cleanup build dirs">
<delete dir="${build.dir}"/>
</target>
</project>
注:
を
これは私がやったことですが、参照によって再利用できる「複合」リソースの作成は許可されていません。 –
また、https://ant.apache.org/manual/Tasks/script.htmlの末尾にあるディレクトリのリストから ''を使ってパスを作成する方法の例が考えられます –