【问题标题】:Modify project build path with Apache Ant in Eclipse在 Eclipse 中使用 Apache Ant 修改项目构建路径
【发布时间】:2011-08-06 06:55:37
【问题描述】:

我有一个典型的 ant 脚本:清理、编译、jar、javadocs 等。我在 Eclipse 中还有 3 个项目:一个库和 2 个项目来测试它。

在这 2 个测试项目的构建路径中,我将库项目中的库 jar 定义为外部 jar。

库 jar 在 jar 名称中有其版本,即 library-0.1.jar。在 ant 脚本中,我有一个库版本的属性:

<property name="project_version" value="0.1"/>

所以要更改版本,我修改此属性并再次运行脚本。正如您可能推断的那样,这会在其他 2 个项目中产生依赖错误,因为它们仍将指向旧文件 library-0.1.jar。

如何在 Eclipse 中自动更改另外两个项目的构建路径? Apache ant 可以用特定的标签做到这一点吗?

谢谢。

【问题讨论】:

    标签: eclipse ant buildpath


    【解决方案1】:

    在所有构建文件中引用带有变量的版本,例如

    <include name="my-${version}.jar"/>
    

    现在,当您执行构建时,您可以使用显式版本执行以匹配您需要的内容,例如

    ant -Dversion=1.3
    

    或者,您可以在每个构建脚本中加载相同的属性文件以加载版本属性

    <property file="version.properties">
    

    请注意,如果您使用后者,您应该删除明确设置值的属性声明(从您上面的帖子中)。要么先加载属性文件。 ....

    【讨论】:

    • 我创建了一个带有版本变量的 version.properties 文件,并在库构建脚本中使用(带有属性,而不是属性),但我遇到了包括测试项目中的 jar 在内的问题。 “include”标签是否将jar添加到构建路径?
    • 是的,我只是猜测您会使用 在构建文件中构建您的 jar 的类路径,但也许您的做法有所不同。在任何情况下,如果您在依赖项目的构建文件中引用库 jar,请使用该变量。
    【解决方案2】:

    使用 sed,例如(未测试):

    版本=2 sed s/value="\d+"/value="$version"/g build.xml

    【讨论】:

      【解决方案3】:

      编辑:使用下面的方法,您将能够使用 Ant 进行编译,但是 eclipse 会在项目资源管理器中向您显示依赖错误,因为您没有在构建中定义任何外部 jar路径面板。要解决这个问题,您必须编辑您将在项目根目录中看到的 .classpath 文件并添加以下行:

      <classpathentry kind="lib" path="../Library/bin"/>
      

      Library 是 Library 项目的文件夹,bin 是类的文件夹。




      已解决

      我必须为其他 2 个项目编写一个 ant 脚本并使用脚本设置类路径,而不是使用 eclipse IDE:

      <path id="build-classpath">
          <fileset dir="${dist}">
              <include name="${project_name}-${project_version}.jar"/>
          </fileset>
      </path>
      

      ${dist} 是 jar 库所在的文件夹,类似于:“../Library/dist”,其中 Library 是项目的名称。
      ${project_name} 和 ${project_version} 是从 version.properties 文件加载的,该文件同样存储在“../Library”中:

      <property file="..Library/version.properties"/>
      

      文件 version.properties 只包含:

      project_name=LibraryName
      project_version=0.1
      

      然后,在编译时添加类路径...

      <target name="compile" depends="clean, makedir">
          <javac srcdir="${src}" destdir="${bin}">
              <classpath refid="build-classpath"/>
          </javac>
      </target>
      

      refid值是之前定义的路径id。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 2012-11-26
        相关资源
        最近更新 更多