Как Вы используете муравья, чтобы не сотрясать несколько файлов JAR и восстановить их в один файл JAR?

Я хотел бы не сотрясать несколько файлов JAR и затем восстановить в один JAR с помощью сценария сборки муравья. Действительно ли это возможно?

19
задан Cesar 12 May 2010 в 22:35
поделиться

3 ответа

Да, это возможно.

Одно из возможных решений, которое создает один файл jar из всех файлов jar в данном каталоге:

<target name="dependencies.jar">
    <jar destfile="WebContent/dependencies.jar">
        <zipgroupfileset dir="lib/default/" includes="*.jar" 
              excludes="*.properties" />
    </jar>
</target>
3
ответ дан 30 November 2019 в 04:33
поделиться

Да, с муравьем это возможно. Файл 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>

В этом примере мы включаем разные наборы файлов. В один набор файлов мы включаем все скомпилированные классы. В другой набор файлов мы включаем два файла конфигурации, от которых зависит этот конкретный проект.

14
ответ дан 30 November 2019 в 04:33
поделиться

Да, это так!

У вас есть две возможности:

  • Ответ Эспена:

Одно возможное решение, которое создает одно jar из всех файлов jar в данный каталог:

<target name="dependencies.jar">
    <jar destfile="WebContent/dependencies.jar">
        <zipgroupfileset dir="lib/default/" includes="*.jar" 
              excludes="*.properties" />
    </jar>
</target>

Это полезно, если вам не нужно исключать содержимое, которое находится в некоторых банках (например, какой-то файл конфигурации свойств, который может переопределить ваш и т. д.). Здесь свойства excludes отфильтровывают файлы из свойства dir.

  • Использование zipfileset

Другое решение - использовать тег 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>
  • Конечно, вы можете объединить два тега (zipfileset и zipgroupfileset) внутри одного тега jar, чтобы получить лучшее из двух.
7
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: