Неверный или поврежденный файл - PullRequest
0 голосов
/ 14 июня 2009

Я попытался создать файл jar из проекта java, который использует некоторые внешние jar. Я создал папку lib и поместил туда все нужные мне банки.

Я запускаю проект в eclipse, добавляя все jar-файлы из папки lib в Build Path, и он работает нормально.

Когда я пытаюсь создать банку с помощью ant из build.xml, кажется, что все в порядке, ошибка не отображается.

Когда я пытаюсь запустить банку, я получаю сообщение «Неверный или поврежденный файл».

В build.xml: Я определяю путь для компиляции:

<path id="project.classpath">  
     <fileset dir="${lib}">
         <include name="**/*.jar"/>
     </fileset>
</path>

Это цель для компиляции:

<target name="compile" depends="init" description="compile the source " >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}">  
          <classpath refid="project.classpath"/>  
    </javac>  
</target>

И это цель создания файла jar:

<target name="dist" depends="compile" description="generate the distribution" >
      <mkdir dir="${dist}"/>
      <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
      <jar jarfile="${dist}/MyProject-${DSTAMP}.jar" basedir="${build}"> 
          <manifest>
            <attribute name="Main-Class" value="${main}" />
            <attribute name="Class-Path:" value="lib/**/*.*"/>
          </manifest>
          <fileset dir="${src}" includes="images/**/*.*" />
       </jar>
       <echo file="${dist}/start.bat" message="java -jar MyProject-${DSTAMP}.jar" />
  </target>

Подскажите, пожалуйста, что я сделал не так?

Ответы [ 2 ]

4 голосов
/ 14 июня 2009

Сначала удалите двоеточие после Class-Path:, чтобы соответствовать

<attribute name="Class-Path" value="lib/**/*.*"/>

Тогда я предлагаю прочитать

HOWTO Создать MANIFEST.MF Classpath From Ant или лучше, используя Manifestclasspath

1 голос
/ 14 июня 2009

Не думаю, что у вашего атрибута Class-Path должен быть конечный двоеточие, указанное в вашем build.xml.

Попробуйте использовать

jar tvf {jarname} 

из командной строки, и посмотрите, сможет ли это расширить ваш JAR-файл, и содержит ли он то, что вы ожидаете (приведенное выше просто выведет оглавление, но это полезная проверка)

РЕДАКТИРОВАТЬ: Изменено, чтобы отразить обратную связь ниже

...