Jar Ant build classpath выдает ошибку при открытии zip-файла

У меня есть проект, построенный в eclipse с зависимостями от сторонних банок. Я пытаюсь создать подходящий файл сборки для ant, используя встроенную функцию export-> ant buildfile eclipses в качестве начального блока.

Когда я запускаю цель сборки, я получаю следующую ошибку:

[javac] error: error reading /base/repo/FabTrace/lib/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0/geronimo-j2ee-management_1.0_spec-1.0.jar; error in opening zip file

И весь файл сборки (автоматически сгенерированный eclipse) выглядит так: (NB: приведенная выше ошибка всегда ссылается на первую банку, указанную в пути к классам)

<project basedir="." default="build" name="FabTrace">
    <property environment="env"/>
    <property name="ECLIPSE_HOME" value="/opt/apps/eclipse"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.5"/>
    <property name="source" value="1.5"/>
    <path id="JUnit 4.libraryclasspath">
        <pathelement location="${ECLIPSE_HOME}/plugins/org.junit4_4.5.0.v20090824/junit.jar"/>
        <pathelement location="${ECLIPSE_HOME}/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar"/>
    </path>
    <path id="FabTrace.classpath">
        <pathelement location="bin"/>
        <pathelement location="lib/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0/geronimo-j2ee-management_1.0_spec-1.0.jar"/>
        <pathelement location="lib/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0/geronimo-jms_1.1_spec-1.0.jar"/>
        <pathelement location="lib/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
        <pathelement location="lib/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
        <pathelement location="lib/commons-lang/commons-lang/2.1/commons-lang-2.1.jar"/>
        <pathelement location="lib/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
        <pathelement location="lib/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar"/>
        <pathelement location="lib/javax/activation/activation/1.1/activation-1.1.jar"/>
        <pathelement location="lib/javax/jms/jms/1.1/jms-1.1.jar"/>
        <pathelement location="lib/javax/mail/mail/1.4/mail-1.4.jar"/>
        <pathelement location="lib/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar"/>
        <pathelement location="lib/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar"/>
        <pathelement location="lib/junit/junit/4.4/junit-4.4.jar"/>
        <pathelement location="lib/log4j/log4j/1.2.15/log4j-1.2.15.jar"/>
        <pathelement location="lib/apache/camel/camel-jms-2.0-M1.jar"/>
        <pathelement location="lib/spring/spring-2.5.6.jar"/>
        <pathelement location="lib/apache/camel/camel-bundle-2.0-M1.jar"/>
        <pathelement location="lib/backport-util-concurrent/backport-util-concurrent-3.1.jar"/>
        <pathelement location="lib/commons-pool/commons-pool-1.4.jar"/>
        <pathelement location="lib/apache/camel/camel-activemq-1.1.0.jar"/>
        <pathelement location="lib/apache/activemq/activemq-camel-5.2.0.jar"/>
        <pathelement location="lib/jencks/jencks-2.2-all.jar"/>
        <pathelement location="lib/jencks/jencks-amqpool-2.2.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/activemq-all-5.3.1.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/optional/xbean-spring-3.6.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/activemq-core-5.3.1.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/camel-jetty-2.2.0.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/web/jetty-6.1.9.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/web/jetty-util-6.1.9.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/web/jetty-xbean-6.1.9.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/optional/activemq-optional-5.3.1.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/web/geronimo-servlet_2.5_spec-1.2.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/optional/spring-beans-2.5.6.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/optional/spring-context-2.5.6.jar"/>
        <pathelement location="lib/activemq/apache-activemq-5.3.1/lib/optional/spring-core-2.5.6.jar"/>
        <path refid="JUnit 4.libraryclasspath"/>
    </path>
    <target name="init">
        <mkdir dir="bin"/>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src/main/java">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src/test/java">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="config">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>
    <target name="clean">
        <delete dir="bin"/>
    </target>
    <target depends="clean" name="cleanall"/>
    <target depends="build-subprojects,build-project" name="build"/>
    <target name="build-subprojects"/>
    <target depends="init" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
            <src path="src/main/java"/>
            <classpath refid="FabTrace.classpath"/>
        </javac>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
            <src path="src/test/java"/>
            <classpath refid="FabTrace.classpath"/>
        </javac>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
            <src path="config"/>
            <classpath refid="FabTrace.classpath"/>
        </javac>
    </target>

</project>

(Я знаю, что здесь есть специфические вещи для затмения. Но я получаю те же результаты с ним или без него.)

Я сделал старый поиск в Google и безуспешно трал.

Я могу подтвердить, что все банки действительно существуют. Я также пробовал из командной строки и как sudo - снова те же результаты.

Любая помощь будет принята с благодарностью.

Ваше здоровье


person Alastair Brayne    schedule 08.04.2010    source источник
comment
Является ли файл jar действительным? Можете ли вы открыть его в WinZip или другом архиваторе?   -  person VonC    schedule 08.04.2010
comment
Вздох. Я так понял, потому что я удалил первые банки, которые изначально вызывали эту проблему (я даже не был уверен, что они мне действительно нужны), и проблема просто переместилась в следующую банку ... ну, это вызвало у меня подозрения. системной неисправности. Оказывается, у меня действительно было много мусорных банок на пути к классам. Должно быть, в какой-то момент произошла загрузка или что-то в этом роде. Так или иначе, теперь все исправлено. Ваше здоровье   -  person Alastair Brayne    schedule 09.04.2010
comment
Почему бы не переместить свой комментарий в ответ, а затем принять его? Для кого-то этот вопрос может оказаться полезным, но на данный момент он отображается как «без ответа».   -  person martin clayton    schedule 24.06.2011


Ответы (2)


Согласно предложениям Мартина Клейтона, мой предыдущий комментарий скопирован ниже в качестве ответа.

«Эх, я так и понял, потому что удалил первые банки, которые изначально вызывали эту проблему (я даже не был уверен, что они мне действительно нужны), и проблема просто переместилась в следующую банку… ну, это заставил меня заподозрить системную ошибку. Оказывается, у меня на самом деле было много мусорных банок в пути к классам. Должно быть, в какой-то момент произошла загрузка или что-то в этом роде. В любом случае, теперь все исправлено.

person Alastair Brayne    schedule 01.09.2011
comment
У меня было множество скрытых банок (.!79974!google-play-services.jar), вызывающих проблему, спасибо за идею! - person rob5408; 28.02.2015

Есть ли <filterset/> в любом из операторов копирования в вашем файле сборки? Однажды я столкнулся с проблемой, когда я <copy> использовал "**/*", и к концу разработки я понял, как использовать <filterset/> с <copy>.

Короче говоря, замена текста работала безупречно, однако любой двоичный файл, исполняемый файл или .jar, который находился в этом пути «**/*», был полностью уничтожен. Вместо того, чтобы открывать файлы в двоичном режиме, они открываются в текстовом режиме, а затем сохраняются в текстовом режиме.

Если у вас есть <filterset/> или что-то подобное в вашем файле сборки, обязательно <exclude/> все двоичные файлы.

person bakoyaro    schedule 30.06.2011