如何编写一个ant任务来从以前编译的JAR中删除文件?假设我的JAR中的文件是:
aaa/bbb/ccc/Class1 aaa/bbb/ccc/Class2 aaa/bbb/def/Class3 aaa/bbb/def/Class4
...我想要一个没有aaa.bbb.def包的JAR文件版本,我需要使用ant剥离它,这样我最终得到一个包含以下内容的JAR:
aaa.bbb.def
aaa/bbb/ccc/Class1 aaa/bbb/ccc/Class2
谢谢!
ujv3wf0j1#
您是否尝试过使用zipfileset任务?
zipfileset
<jar destfile="stripped.jar"> <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file" /> </jar>
<property name="library.dir" value="dist" /> <property name="library.file" value="YourJavaArchive.jar" /> <property name="library.path" value="${library.dir}/${library.file}" /> <property name="library.path.new" value="${library.dir}/new-${library.file}" /> <target name="purge-superfluous"> <echo>Removing superfluous files from Java archive.</echo> <jar destfile="${library.path.new}"> <zipfileset src="${library.path}" excludes="**/ComicSans.ttf" /> </jar> <delete file="${library.path}" /> <move file="${library.path.new}" tofile="${library.path}" /> </target>
bnlyeluc2#
你得打开再重新打开。
<unzip src="myjar.jar" dest="/classes/"> <jar destfile="newjar.jar" basedir="/classes/" includes="**/*" excludes="**/def/*" />
xpszyzbs3#
答案对我来说不太合理-
<zip destfile="tmp.jar"> <zipfileset src="src.jar"> <exclude name="**/*.class" /> </zipfileset> </zip> <move file="tmp.jar" tofile="src.jar" />
这只使用一次传递,不会给构建增加太多时间来源:http://ant.1045680.n5.nabble.com/Remove-entru-from-ZIP-file-using-ANT-td1353728.html
axkjgtzd4#
如果有jar文件功能的归档程序,例如“zip”在Linux上可用,任务可以通过
<exec executable="zip"> <arg value="-d" /> <arg value="myJarCopyToStrip.jar" /> <arg value="aaa/bbb/def/*" /> <arg value="aaa/bbb/def" /> </exec>
子树删除取决于所用归档器的功能。Ant“exec”任务的“os”属性允许在不同的操作系统上使用不同的归档器。
sr4lhrrt5#
我来这里是想用ant来解决Gradle unzip中的一些缺点。以防万一还有其他人和我一样。下面是一个例子:
task antUnzip() << { ant.jar(destfile: "stripped.jar") { zipfileset(src: "full.jar", excludes: "files/to/exclude/**/*.file") {} } }
fd3cxomn6#
我不确定是否有直接的解决方案来满足你的要求。我建议将jar文件分解到临时目录,然后删除不需要的类文件。最后创建一个新的jar,其中包含所需的类文件。Apache Ant手册参考:
6条答案
按热度按时间ujv3wf0j1#
您是否尝试过使用
zipfileset
任务?示例
bnlyeluc2#
你得打开再重新打开。
xpszyzbs3#
答案对我来说不太合理-
这只使用一次传递,不会给构建增加太多时间
来源:http://ant.1045680.n5.nabble.com/Remove-entru-from-ZIP-file-using-ANT-td1353728.html
axkjgtzd4#
如果有jar文件功能的归档程序,例如“zip”在Linux上可用,任务可以通过
子树删除取决于所用归档器的功能。
Ant“exec”任务的“os”属性允许在不同的操作系统上使用不同的归档器。
sr4lhrrt5#
我来这里是想用ant来解决Gradle unzip中的一些缺点。
以防万一还有其他人和我一样。
下面是一个例子:
fd3cxomn6#
我不确定是否有直接的解决方案来满足你的要求。我建议将jar文件分解到临时目录,然后删除不需要的类文件。最后创建一个新的jar,其中包含所需的类文件。
Apache Ant手册参考: