Я хотел бы не сотрясать несколько файлов JAR и затем восстановить в один JAR с помощью сценария сборки муравья. Действительно ли это возможно?
Да, это возможно.
Одно из возможных решений, которое создает один файл jar из всех файлов jar в данном каталоге:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
Да, с муравьем это возможно. Файл jar - это, по сути, zip-архив со специальным файлом манифеста. Итак, чтобы распаковать, нам нужно распаковать банки. Ant включает задачу распаковать .
Чтобы распаковать / распаковать все файлы jar в вашем проекте:
<target name="unjar_dependencies" depends="clean">
<unzip dest="${build.dir}">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</unzip>
</target>
Очевидно, вам нужно сначала объявить $ {build.dir} и $ {lib.dir}. Строка
говорит ant включить все файлы, которые имеют расширение jar, вы можете настроить их в соответствии с вашими потребностями.
Чтобы упаковать все в банку, вы используете задачу jar :
<target name="make_jar" depends="compile, unjar_dependencies">
<jar basedir="${build.dir}"
destfile="${dist.dir}/${project_name}.jar">
<manifest>
<attribute name="Main-Class" value="${mainclass}" />
</manifest>
<fileset dir="${build.dir}">
<include name="**/*.class" />
</fileset>
<fileset dir="${src.dir}">
<include name="applicationContext.xml" />
<include name="log4j.properties" />
</fileset>
</jar>
</target>
В этом примере мы включаем разные наборы файлов. В один набор файлов мы включаем все скомпилированные классы. В другой набор файлов мы включаем два файла конфигурации, от которых зависит этот конкретный проект.
Да, это так!
У вас есть две возможности:
Одно возможное решение, которое создает одно jar из всех файлов jar в данный каталог:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
Это полезно, если вам не нужно исключать содержимое, которое находится в некоторых банках (например, какой-то файл конфигурации свойств, который может переопределить ваш и т. д.). Здесь свойства excludes отфильтровывают файлы из свойства dir.
Другое решение - использовать тег zipfileset, где свойство excludes на этот раз будет отфильтровывать содержимое из jar-файла для слияния.
<jar destfile="your_final_jar.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="main.class"/>
<attribute name="Class-Path" value="."/>
</manifest>
<zipfileset
excludes="META-INF/*.SF"
src="/path/to/first/jar/to/include.jar"/>
</jar>