对于一个java项目,我想将它依赖的所有第三方jar合并到Apache Ant创建的主jar中,我已经设法做了.
问题是这些jar文件中的一些在他们的META-INF-directories中有签名文件,所以当我尝试运行我的jar文件时,我收到错误消息"Invalid signature file digest for Manifest main attributes".手动删除签名文件后,错误消失了.
我尝试使用excludes-attribute或exclude-tag 过滤我的ant文件中的签名文件,但似乎没有任何效果.
这是蚂蚁任务:
<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任务中过滤生成的jar中的文件?谢谢你的帮助!
小智 39
carej是对的.我一直在尝试这样做,将其他罐子合并到我的应用程序jar中,不包括一些文件,并且没有办法使用<zipgroupfileset>它.
我的解决方案是unzip/clean-up/jar方法的一种变体:我首先将所有外部库jar <zipgroupfileset>合并为一个,然后将其合并到我的中<zipfileset>,并允许过滤.在我的情况下,它的工作速度明显快于将文件解压缩到磁盘上的速度更快:
<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>
首先<jar>将所有发现中的lib罐子/成外部libs.jar,然后我让等待一秒钟,以避免收到有关其在未来修改日期的文件警告,然后我从构建合并我的类文件/具有external-libs.jar内容的目录,不包括其根目录中的文件,在本例中为README文件和示例.
然后我有自己的README文件,列出了我在我的应用程序中包含的所有库所需的信息,例如许可证,网站等.
小智 11
据我所知,使用<zipgroupfileset>时无法过滤:使用的include/excludes适用于要合并的拉链,而不是其中的内容.
如果您要合并一组众所周知的JAR,则可以为每个JAR使用单独的<zipset>条目; 此方法允许使用include/exclude过滤源存档的内容.
另一种方法是简单地将所有内容解压缩到一个临时位置,删除/修改不需要的位,然后将所有内容拉回来.
| 归档时间: | 
 | 
| 查看次数: | 18604 次 | 
| 最近记录: |