gpt4 book ai didi

ant - 如何使用包含任意自定义类路径的 ANT 构建 WAR

转载 作者:行者123 更新时间:2023-12-04 02:21:16 25 4
gpt4 key购买 nike

我必须从 ANT 脚本构建一个 WAR 文件。我已经声明了 fileset使用由任意库组成的编译类路径(在下面的示例中,它们只有 2 个。在我的真实情况下,最多 90 个)。我想在 war 中包含同一组库,而不必在两个地方声明所有库:在<javac> 中在 <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>

...但是尽管图书馆包含在最终 war 中,但它们保留了它们的原始路径,如下所示:

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 中,但到目前为止还没有运气。

最佳答案

考虑使用 <mappedresources> 包含 <chainedmapper> 那。链映射器又包含一个 <flattenmapper> 。其次是 <globmapper> ...

<war destfile="mywar.war" needxmlfile="false">
<mappedresources>
<fileset refid="my.classpath" />
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="WEB-INF/lib/*.jar" />
</chainedmapper>
</mappedresources>
</war>

<mappedresources>替换 <lib><war>任务。

<flattenmapper><fileset> 中的文件路径中剥离目录. <globmapper>添加目录。

<mappedresources>至少需要 Ant 1.8。

关于ant - 如何使用包含任意自定义类路径的 ANT 构建 WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com