2013-02-09 3 views
0

Я написал/скопировал простой пример муравья и пытаюсь развернуть Java-прогамму с ним. Мой файл сборки bsp0201.xml:ant: сгенерированный JAR не может быть выполнен

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="bsp0201" default="main" basedir="."> 
    <property name="dir.src" value="./source" /> 
    <property name="dir.build" value="./classes" /> 
    <property name="dir.lib" value="./lib" /> 
    <path id="cp"> 
     <pathelement path="${classpath}" /> 
     <pathelement location="${dir.build}" /> 
    </path> 
    <target name="main" depends="prepare, compile, run" /> 
    <target name="prepare"> 
     <mkdir dir="${dir.build}" /> 
     <delete> 
      <fileset dir="${dir.build}" includes="**/*" /> 
     </delete> 
    </target> 
    <target name="compile"> 
     <javac classpathref="cp" destdir="${dir.build}" srcdir="${dir.src}" includes="**/*.java" includeantruntime="false" /> 
     <mkdir dir="${dir.lib}" /> 
     <jar destfile="${dir.lib}/ae.jar"> 
      <fileset dir="${dir.build}" includes="**/*.class" /> 
     </jar> 
    </target> 
    <target name="run" if="test"> 
     <java classname="main.GeoAnalyzerMain" classpath="${dir.lib}/ae.jar"> 
      <arg line="${test}" /> 
     </java> 
    </target> 
</project> 

Мой муравей коммандос & выходной результат:

# ant -f bsp0201.xml run -Dtest=Echo 
Buildfile: /var/www/sandbox/ant/bsp0201/bsp0201.xml 

run: 

BUILD SUCCESSFUL 
Total time: 1 second 

Ant создает папки, файлы классов и JAR-файл ae.jar. Но размер этого JAR-файла составляет всего 19,1 КБ (вместо 297 Кбайт JAR-файла, когда я его создаю с помощью eclipse), и я не могу его выполнить. Что я делаю неправильно?

Thx

+0

Строка говорит, что она успешна, поэтому программа выполнена. Посмотрите содержимое обоих файлов jar и посмотрите, есть ли разница. Может быть, это просто уровень сжатия, который отличается. –

+0

Все ли файлы исходного кода в каталоге './Source'? После запуска сборки в каталоге './Classes' содержатся все скомпилированные классы? –

+0

Вы можете использовать jar -tvf для отображения содержимого файлов jar. –

ответ

0

Я редактировал сборку XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="bsp0201" default="main" basedir="."> 
    <property name="dir.src" value="./source" /> 
    <property name="dir.build" value="./classes" /> 
    <property name="dir.lib" value="./lib" /> 
    <path id="cp"> 
     <pathelement path="${classpath}" /> 
     <pathelement location="${dir.build}" /> 
    </path> 
    <target name="main" depends="prepare, compile, run" /> 
    <target name="prepare"> 
     <mkdir dir="${dir.build}" /> 
     <delete> 
      <fileset dir="${dir.build}" includes="**/*" /> 
     </delete> 
    </target> 
    <target name="compile"> 
     <javac classpathref="cp" destdir="${dir.build}" srcdir="${dir.src}" includes="**/*.java" includeantruntime="false" /> 
     <mkdir dir="${dir.lib}" /> 
     <jar destfile="${dir.lib}/AntExample.jar"> 
      <fileset dir="${dir.build}" includes="**/*.class" /> 
      <fileset dir="."> 
       <include name="img/*.*" /> 
      </fileset> 
     </jar> 
    </target> 
    <target name="run" if="test"> 
     <java classname="main.GeoAnalyzerMain" classpath="${dir.lib}/AntExample.jar"> 
      <arg line="${test}" /> 
     </java> 
    </target> 
</project> 

Теперь папка изображения копируется в архив результатов. Но JAR все еще не может быть выполнен.

EDIT:

Это работает!

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="bsp0201" default="main" basedir="."> 
    <property name="dir.src" value="./source" /> 
    <property name="dir.build" value="./classes" /> 
    <property name="dir.lib" value="./lib" /> 
    <path id="cp"> 
     <pathelement path="${classpath}" /> 
     <pathelement location="${dir.build}" /> 
    </path> 
    <target name="main" depends="prepare, compile, run" /> 
    <target name="prepare"> 
     <mkdir dir="${dir.build}" /> 
     <delete> 
      <fileset dir="${dir.build}" includes="**/*" /> 
     </delete> 
    </target> 
    <target name="compile"> 
     <javac classpathref="cp" destdir="${dir.build}" srcdir="${dir.src}" includes="**/*.java" includeantruntime="false" /> 
     <mkdir dir="${dir.lib}" /> 
     <jar destfile="${dir.lib}/AntExample.jar"> 
      <fileset dir="${dir.build}" includes="**/*.class" /> 
      <fileset dir="."> 
       <include name="img/*.*" /> 
      </fileset> 
      <manifest> 
       <attribute name="Main-Class" value="main.GeoAnalyzerMain" /> 
      </manifest> 
     </jar> 
    </target> 
    <target name="run" if="test"> 
     <java classname="main.GeoAnalyzerMain" classpath="${dir.lib}/AntExample.jar"> 
      <arg line="${test}" /> 
     </java> 
    </target> 
</project> 
0

Да, это хорошая идея, чтобы сравнить JARs. :) Здесь вы можете увидеть результат сравнительного:

JARs comparison

Папка/IMG и /.classpath отсутствуют в Ant-JAR. Почему Ant не включил их? Как заставить Ant включать отсутствующие файлы/папки?

+0

'.classpath' и' .project' являются внутренними файлами настроек 'Eclipse IDE'. Он не должен влиять на запуск двоичного кода Java. Это скрытые файлы (в UNIX), и ANT, вероятно, пропустит их по умолчанию при создании файла jar. –

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