2014-01-10 4 views
1

Я написал скрипт ant для создания файла Jar. Этот файл включен в проект Eclipse и отлично работает при запуске eclipse. Но когда он запускается извне через командную строку, он показывает следующую ошибку: Сообщение об ошибке: Проблема создания jar: архив содержит более 65535 записей. (и архив, вероятно, поврежден, но я не смог его удалить)Получение ошибки размера zip при запуске муравей для создания jar

Jar Размер: 130 МБ. Ant: 1.9.3 Java: 1,6

<property name="jar.name" value="SAFAL.jar" /> 
<property name="source.root" value="src" /> 
<property name="class.root" value="bin" /> 
<property name="lib.dir" value="lib" /> 
<property name="jar.dir" value="C:\D\SAFAL-Exe" /> 
<property name="Main-Class" value="com.ktt.main.SAFALEval" /> 
<property name="conf.pkj" value="com/ktt/business/configurations" /> 
<property name="img.pkj" value="com/ktt/business/images" /> 

<path id="project.class.path"> 
    <pathelement location="${class.root}" /> 
    <fileset dir="${lib.dir}"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 

<target name="clean" description="cleans up build structures"> 
    <delete dir="${class.root}" /> 
    <delete file="${jar.dir}/${jar.name}" /> 
</target> 

<target name="prepare" description="sets up build structures"> 
    <mkdir dir="${class.root}" /> 
</target> 

<target name="compile" depends="prepare" description="Compiles all java classes"> 
    <javac srcdir="${source.root}" destdir="${class.root}" debug="on" optimize="off" deprecation="on" source="1.6" target="1.6" includeantruntime = "false"> 

     <classpath refid="project.class.path" /> 
    </javac> 

    <mkdir dir="${class.root}/${conf.pkj}" /> 
    <mkdir dir="${class.root}/${img.pkj}" /> 

    <copy todir="${class.root}/${conf.pkj}"> 
     <fileset dir="${source.root}/${conf.pkj}" /> 
    </copy> 

    <copy todir="${class.root}/${img.pkj}"> 
     <fileset dir="${source.root}/${img.pkj}" /> 
    </copy> 

</target> 

<target name="jar" depends="compile"> 

    <delete file="${jar.dir}/${jar.name}" quiet="true" failonerror="false" /> 

    <jar destfile="${jar.dir}/${jar.name}"> 

     <fileset dir="${class.root}" includes="**/*.*" /> 

     <zipgroupfileset dir="${lib.dir}" /> 


     <manifest> 
      <attribute name="Main-Class" value="${Main-Class}" /> 
      <attribute name="Class-Path" value="." /> 
     </manifest> 

    </jar> 


</target> 


<target name="run"> 
    <java fork="true" classname="${Main-Class}"> 
     <classpath> 
      <path location="./${jar.name}" /> 
     </classpath> 
    </java> 
</target> 

+0

Я предполагаю, что за пределами Eclipse он запускается из текущего рабочего каталога. Таким образом, ваши относительные пути (bin, lib, src, ...) могут содержать гораздо больше файлов, чем из вашего проекта. – PeterMmm

+0

Спасибо, Питер. Я выполняю команду ant из каталога, в котором присутствуют файлы lib, bin, ant. – amit

+0

Еще одно наблюдение: файл jar (хотя и поврежден), который создается, имеет тот же размер, что и jar, созданный через eclipse. – amit

ответ

2

Проблема решена. Я изменил версию ANT с 1.9.3 до 1.8.4 (версия 1.8.4 по умолчанию для eclipse ant). Теперь файл сборки ant успешно выполняется.

3

Для создания ZIP/JAR-файлы с более чем 65535 записей, которые нужно Apache Ant с поддержкой "zip64Mode" - первый вариант который поддерживает это Ant 1.9.1.

Поэтому я предполагаю, что ваша автономная версия Apache Ant слишком стар.

Смотрите также http://ant.apache.org/manual/Tasks/zip.html#zip64

+0

У меня ANT 1.9.3. По-прежнему стоит одна и та же проблема. Это строка с проблемой: amit

+0

zip64Mode по умолчанию устанавливается как 'по мере необходимости'. – amit

+0

Спасибо, Роберт. Это помогло решить проблему. – amit

Смежные вопросы