请帮助我解决我的Ant+;常春藤+;Java构建/依赖性问题
我可以让Eclipse导出一个独立的JAR文件,这很好。但是,当我尝试将build.xml文件与Ant一起使用时,我得到了大约100个错误,因为大量引用无法解析请帮助我解决我的Ant+;常春藤+;Java构建/依赖性问题,java,eclipse,ant,ivy,build-dependencies,Java,Eclipse,Ant,Ivy,Build Dependencies,我可以让Eclipse导出一个独立的JAR文件,这很好。但是,当我尝试将build.xml文件与Ant一起使用时,我得到了大约100个错误,因为大量引用无法解析 <!-- Deletes the existing build, docs and dist directory--> <target name="clean"> <delete dir="${build.dir}" /> <delete dir="${docs.dir}
<!-- 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>
这是我的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>
提前谢谢大家 正如@oers所指出的,您不能将jar文件作为源文件添加到“lib”目录中,任务不能以这种方式工作
<!-- 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解析的JAR添加到ANT类路径。最简单的方法是使用常春藤任务,如下所示:
<!-- 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>
<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>
Javac需要lib dir位于classmate元素中,而不是src元素中。谢谢你的工作。不幸的是,我遇到了另一个问题。我在进行Ant构建时遇到了这个错误:“类路径引用的归档文件:C:/Program Files/Java/jdk1.6.0!33/lib/tools.jar不存在。”@David听起来你用来运行Ant的JVM不是JDK(与JRE相反)。谢谢你,这正是我需要的。现在我的问题都是XML格式的问题,我可以自己解决。