我可以让Eclipse导出一个工作正常的独立JAR文件。但是当我尝试将我的build.xml文件与Ant一起使用时,我得到大约100个错误,因为无法解析一堆引用。
这是我的build.xml
<!-- Deletes the existing build, docs and dist directory-->
<target name="clean">
<delete dir="${build.dir}" />
<delete dir="${docs.dir}" />
<delete dir="${dist.dir}" />
</target>
<!-- Creates the build, docs and dist directory-->
<target name="makedir">
<mkdir dir="${build.dir}" />
<mkdir dir="${docs.dir}" />
<mkdir dir="${dist.dir}" />
</target>
<!-- =================================
target: resolve
================================= -->
<target name="resolve" description="--> retrieve dependencies with ivy">
<ivy:retrieve />
</target>
<!-- Compiles the java code (including the usage of library for JUnit -->
<target name="compile" depends="resolve,clean, makedir">
<javac destdir="${build.dir}" includeantruntime="false">
<src path="${src.dir}"/>
<src path="${lib.dir}"/>
</javac>
</target>
<!-- Creates Javadoc -->
<target name="docs" depends="compile">
<javadoc packagenames="src" sourcepath="${src.dir}" destdir="${docs.dir}">
<!-- Define which files / directory should get included, we include all -->
<fileset dir="${src.dir}">
<include name="**" />
</fileset>
</javadoc>
</target>
<!--Creates the deployable jar file -->
<target name="jar" depends="compile">
<jar destfile="${dist.dir}\hcm.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class" value="org.heromanager.MainWindow" />
</manifest>
</jar>
</target>
<target name="main" depends="compile, jar, docs">
<description>Main target</description>
</target>
</project>
这是ivy.xml文件
<ivy-module version="2.0">
<info organisation="org.herocombatmanager" module="mainwindow"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.0"/>
<dependency org="com.jgoodies" name="looks" rev="2.2.2"/>
<dependency org="com.jgoodies" name="forms" rev="1.2.1"/>
</dependencies>
</ivy-module>
以下是一些错误: - )
[javac] H:\Development\Workspace\HeroCombatManager\src\org\herocombatmanager\XMLParser.java:3: package org.apache.commons.lang3 does not exist
[javac] import org.apache.commons.lang3.StringUtils;
[javac] ^
[javac] H:\Development\Workspace\HeroCombatManager\src\org\herocombatmanager\AttackAdvantagesPanel.java:10: package com.jgoodies.forms.factories does not exist
[javac] import com.jgoodies.forms.factories.FormFactory;
[javac] ^
[javac] H:\Development\Workspace\HeroCombatManager\src\org\herocombatmanager\AttackAdvantagesPanel.java:11: package com.jgoodies.forms.layout does not exist
[javac] import com.jgoodies.forms.layout.*;
[javac] ^
...
[javac] H:\Development\Workspace\HeroCombatManager\src\org\herocombatmanager\AttackAdvantagesPanel.java:40: cannot find symbol
[javac] symbol : class FormLayout
[javac] location: class org.herocombatmanager.AttackAdvantagesPanel
[javac] this.setLayout(new FormLayout(new ColumnSpec[] {
[javac] ^
[javac] H:\Development\Workspace\HeroCombatManager\src\org\herocombatmanager\AttackAdvantagesPanel.java:40: cannot find symbol
[javac] symbol : class ColumnSpec
[javac] location: class org.herocombatmanager.AttackAdvantagesPanel
[javac] this.setLayout(new FormLayout(new ColumnSpec[] {
[javac] ^
提前谢谢大家..
答案 0 :(得分:3)
正如@oers指出的那样,你不能将“lib”目录中的jar文件作为源文件添加,javac任务不能正常工作。
您需要将常春藤解析的罐子添加到ANT类路径中。最简单的方法是使用常春藤cachepath任务,如下所示:
<target name="resolve" description="--> retrieve dependencies with ivy">
<ivy:resolve/>
<ivy:cachepath pathid="compile.path"/>
</target>
<target name="compile" depends="resolve,clean, makedir">
<javac destdir="${build.dir}" includeantruntime="false" classpathref="compile.path">
<src path="${src.dir}"/>
</javac>
</target>