Я хочу упаковать некоторые конкретные библиотеки в пакет. Поэтому я хочу ниже задачи ant:
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="target" location="c:\\temp\\invoke.jar"/>
<target name="dist" depends="compile"
description="generate the distribution" >
<echo message="Start jar java.lang.invoke package.."/>
<delete file="${target}" />
<jar destfile="${target}" basedir="${build}">
<fileset dir="${build}/">
<include name="java/lang/invoke/*.*" />
<exclude name="com/** javax/** org/** sun/**" />
</fileset>
</jar>
</target>
Структура каталогов
c:\....\J9 JCL>dir bin
Directory of C:\...\J9 JCL\bin
03/10/2015 05:42 PM <DIR> com
03/10/2015 05:42 PM <DIR> java
03/10/2015 05:42 PM <DIR> javax
07/20/2014 06:44 PM 2,173 notices.txt
03/10/2015 05:42 PM <DIR> org
07/20/2014 06:44 PM 1,056 rcm.xsd
03/10/2015 05:42 PM <DIR> sun
07/20/2014 06:44 PM 230 tags.properties
AS, показанный в задаче "dist", только библиотека в
бен /Java/языки /Invoke
требуется для задачи jar. Но после запуска, похоже, оба include и exclude не работают. Есть ли какие-то ошибки в моем сценарии?
попробуйте это, просто измените целевой раздел и удалите набор файлов
<target name="dist" depends="compile"
description="generate the distribution" >
<echo message="Start jar java.lang.invoke package.."/>
<delete file="${target}" />
<jar destfile="${target}"
basedir="${build}"
include name="java/lang/invoke/*.*"
exclude name="com/** javax/** org/** sun/**"
</jar>
</target>
Причина, по которой ваши исключения не работают, и ответ faljbour заключается в том, что работает вложенный элемент exclude
а атрибуты excludes
работают по-разному. Атрибут разбивает свое значение на запятую или пробелы, поэтому вы можете указать несколько из них. Элемент не работает - в конце концов вы можете указать шаблон, содержащий пробелы. Таким образом, вы получаете единый образец "com/** javax/** org/** sun/**", который, безусловно, ничего не соответствует.
<jar destfile="${target}" basedir="${build}">
<fileset dir="${build}"
includes="java/lang/invoke/*.*"
excludes="com/** javax/** org/** sun/**" />
</fileset>
</jar>
или
<jar destfile="${target}" basedir="${build}">
<fileset dir="${build}/">
<include name="java/lang/invoke/*.*" />
<exclude name="com/**"/>
<exclude name="javax/**"/>
<exclude name="org/**"/>
<exclude name="sun/**" />
</fileset>
</jar>
будет работать так же. BTW, вы можете оставить **
как Ant автоматически переводит шаблон foo/
to foo/**
.
includes
а неinclude name