我有一些外部jar的运行时依赖项,我想"重新"到一个jar中.这些外部依赖项存储在external_jars目录中,我希望不必全部列出它们(即,如果我的依赖项发生更改,则不需要更改构建脚本).有什么想法吗?
谷歌给了我一个很好的答案,如何做到这一点 - 如果你不介意将每个jar列为依赖:
http://markmail.org/message/zijbwm46maxzzoo5
粗略地说,我想要的是下面的内容,它们将lib目录中的所有jar组合成out.jar(带有一些合理的覆盖规则).
jar -combine -out out.jar -in lib/*.jar
Run Code Online (Sandbox Code Playgroud)
nig*_*ale 66
弗拉基米尔的答案是正确的,但我觉得他的建议意味着重新包装一个大的out.jar中的所有罐子,然后将其作为单个<zipfileset>或类似的东西送到Ant Jar任务.这种两步法是不必要的.我不确定这是否与Ant版本有关,但我有Ant 1.7.1,它的<jar>任务理解<zipgroupfileset>,它允许直接提供第三方罐子的所有内容.
<jar destfile="MyApplication.jar">
<zipgroupfileset dir="lib" includes="*.jar" />
<!-- other options -->
<manifest>
<attribute name="Main-Class" value="Main.MainClass" />
</manifest>
</jar>
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 57
只需使用zipgroupfilesetAnt Zip任务即可
<zip destfile="out.jar">
<zipgroupfileset dir="lib" includes="*.jar"/>
</zip>
Run Code Online (Sandbox Code Playgroud)
这将使所有包含的jar库内容变得扁平化.
Sta*_*ale 23
你可以看看jarjar:
http://code.google.com/p/jarjar/
首先尝试将JAR解压缩到编组目录:
<target name="combine-jars">
<mkdir dir="${marshall.dir}"/>
<unzip dest="${marshall.dir}">
<fileset dir="${external.jar.dir}">
<include name="**/*.jar"/>
</fileset>
</unzip>
<jar destfile="${combined.jar}" basedir="${marshall.dir"}>
<delete dir="${marshall.dir}"/>
</target>
Run Code Online (Sandbox Code Playgroud)
${marshall.dir}临时目录在哪里,${external.jar.dir}是您保留JAR的位置,并且${combined.jar}是目标JAR.
| 归档时间: |
|
| 查看次数: |
69932 次 |
| 最近记录: |