我必須從ANT腳本構建WAR文件。我已經聲明fileset
與由任意庫組成的編譯類路徑(在下面的例子中,它們只有2個。在我的真實情況下,最多爲90)。我希望在戰爭中包含相同集合的庫,而不必在兩個地方聲明它們全部:在<javac>
和<war>
任務內。如何使用ANT構建WAR,包括任意的自定義類路徑
這是我的Ant腳本:
<project name="war-with-custom-classpath" basedir=".">
<property environment="env" />
<property name="lib" location="${env.USERPROFILE}/.m2/repository" />
<fileset id="my.classpath" dir="${lib}">
<include name="commons-pool/commons-pool/1.5.6/commons-pool-1.5.6.jar" />
<include name="commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" />
</fileset>
<target name="compile">
<javac srcdir="src/test/java" classpathref="my.classpath">
</javac>
</target>
<target name="war">
<delete file="mywar.war" />
<war destfile="mywar.war" needxmlfile="false">
<lib refid="my.classpath">
</lib>
</war>
<!--Read the created war to see its contents-->
<exec command="jar ft mywar.war">
</exec>
</target>
</project>
...但altough庫被納入最後的戰爭,他們保留其原始路徑這樣的:
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/lib/
WEB-INF/lib/commons-logging/
WEB-INF/lib/commons-logging/commons-logging/
WEB-INF/lib/commons-logging/commons-logging/1.1.1/
WEB-INF/lib/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
WEB-INF/lib/commons-pool/
WEB-INF/lib/commons-pool/commons-pool/
WEB-INF/lib/commons-pool/commons-pool/1.5.6/
WEB-INF/lib/commons-pool/commons-pool/1.5.6/commons-pool-1.5.6.jar
有任何形式的JAR在將其從路徑上剝離後包括在內?就像這樣:
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/lib/
WEB-INF/lib/commons-logging-1.1.1.jar
WEB-INF/lib/commons-pool-1.5.6.jar
我已經嘗試過:
<lib refid="my.classpath" prefix="/WEB-INF/lib"/>
...但結果還是一樣。
我也試過:
<lib refid="my.classpath" fullpath="WEB-INF/lib"/>
或
<lib refid="my.classpath" fullpath="/WEB-INF/lib"/>
...它打開錯誤Cannot set both fullpath and prefix attributes
。
而且我也試過:
<zipfileset refid="my.classpath" fullpath="WEB-INF/lib" />
...但它開啓錯誤fullpath attribute may only be specified for filesets that specify a single file.
而且我還研究在Ant Manual和SO,但沒有運氣這麼遠。
男人,這就是爲什麼我喜歡SO。有效。非常感謝! –