Ant build classpath jar генерирует «ошибку при открытии zip-файла» - PullRequest
6 голосов
/ 08 апреля 2010

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

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

[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 - опять те же результаты.

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

Приветствия

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011

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

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

0 голосов
/ 30 июня 2011

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

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

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

...