首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ant:从合并的jar文件中排除文件

Ant:从合并的jar文件中排除文件
EN

Stack Overflow用户
提问于 2009-08-13 22:04:47
回答 5查看 19.7K关注 0票数 19

对于一个java项目,我希望将它所依赖的所有第三方jar合并到Apache Ant创建的主jar中,我已经做到了这一点。

问题是其中一些jar文件在它们的META-INF-directories中有签名文件,所以当我尝试运行我的jar文件时,我得到了错误消息"Invalid signature file digest for Manifest main attributes"。在我手动删除签名文件之后,错误就消失了。

我试图用excludes-attribute或exclude-tag在我的ant文件中过滤出签名文件,但似乎没有任何效果。

这是ant-task:

代码语言:javascript
复制
<target name="jar" description="Creates the jar file">
  <mkdir dir="${jar}"/>
  <jar destfile="${jar}/${ant.project.name}.jar" level="9" filesetmanifest="mergewithoutmain">
    <zipgroupfileset dir="${lib}" includes="*.jar"/>
    <zipfileset dir="${class}"/>
    <manifest>
      <attribute name="Main-Class" value="${mainclass}"/>
    </manifest>
  </jar>
</target>

在这个ant-task中,我如何从结果jar中过滤文件?谢谢你的帮忙!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-14 01:22:49

据我所知,在使用时没有过滤的方法:这里使用的include/excludes适用于要合并的zip,而不是其中的内容。

如果您有一组广为人知的JAR要合并,那么您可以对每个JAR使用单独的条目;这种方法允许使用include/exclude来过滤源存档的内容。

另一种方法是简单地将所有内容解压缩到一个临时位置,删除/修改不需要的部分,然后将所有内容压缩回去。

票数 11
EN

Stack Overflow用户

发布于 2010-03-11 23:32:44

carej是对的。我一直在尝试这样做,将其他jar合并到我的应用程序jar中,但不能使用<zipgroupfileset>

我的解决方案是unzip/clean-up/jar方法的一个变体:我首先使用<zipgroupfileset>将所有外部库jar合并为一个库jar,然后使用允许过滤的<zipfileset>将其合并到我的库中。在我的例子中,它的运行速度比将文件解压缩到磁盘上的速度快得多,而且更干净:

代码语言:javascript
复制
<jar jarfile="${dist}/lib/external-libs.jar">
  <zipgroupfileset dir="lib/">
    <include name="**/*.jar"/>
  </zipgroupfileset>
</jar>
<sleep seconds="1"/>
<jar jarfile="${dist}/lib/historadar-${DSTAMP}.jar" manifest="Manifest.txt">
  <fileset dir="${build}" includes="**/*.*"/>
  <zipfileset src="${dist}/lib/external-libs.jar">
    <exclude name="*"/>
  </zipfileset>
</jar>

第一个构建将它在lib/中找到的所有jars放入external-libs.jar中,然后我让它等待一秒钟,以避免收到关于将来有修改日期的文件的警告,然后我将<jar> /目录中的类文件与external-libs.jar的内容合并,排除其根目录中的文件,在本例中是自述文件和示例。

然后,我有了自己的自述文件,其中列出了我在应用程序中包含的库所需的所有信息,如许可证、网站等。

票数 39
EN

Stack Overflow用户

发布于 2012-12-28 02:11:58

您可以使用zipfileset标记中的exclude参数从合并的外部JAR文件中删除内容,如下所示:

代码语言:javascript
复制
<jar jarfile="${dist}/lib/external-libs.jar">
  <zipgroupfileset dir="lib/" excludes="META-INF/**/*">
    <include name="**/*.jar"/>
  </zipgroupfileset>
</jar>

生成的JAR文件将是未签名的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1274879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档