【问题标题】:Please help me resolve my Ant + Ivy + Java build/dependency issues请帮我解决我的 Ant + Ivy + Java 构建/依赖问题
【发布时间】:2012-10-14 23:34:18
【问题描述】:

我可以让 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]                                           ^

提前谢谢大家..

【问题讨论】:

  • Javac 需要 lib 目录位于 classmate 元素而不是 src 元素中

标签: java eclipse ant ivy build-dependencies


【解决方案1】:

正如@oers 所指出的,您不能将“lib”目录中的jar 文件添加为源文件,javac 任务不能那样工作。

您需要将 ivy 解析的 jar 添加到 ANT 类路径中。最简单的方法是使用 ivy 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>

【讨论】:

  • 谢谢你的工作。不幸的是,我遇到了另一个问题。我在执行 Ant 构建时收到此错误:“归档:类路径引用的 C:/Program Files/Java/jdk1.6.0_33/lib/tools.jar 不存在。”
  • @David 听起来您用来运行 ANT 的 JVM 不是 JDK(相对于 JRE)。见:stackoverflow.com/search?q=[ant]+tools.jar
  • 谢谢你,这正是我所需要的。现在我的问题都是 XML 格式类型的问题,我可以自己解决。
猜你喜欢
  • 2013-06-30
  • 2011-05-14
  • 2011-12-11
  • 2011-04-28
  • 2013-03-11
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
相关资源
最近更新 更多