3

基本上这是我的要求,如果有人在“Java Build Path”部分中添加或删除了一个jar引用,那么在构建项目并生成项目的jar时应该包含该jar(或者在删除的情况下不包含)带有一个 build.xml 蚂蚁文件。我期待在 xml 文件中引用属性或变量。就像是:

<!-- copy the JARs that you need to "target" directory  -->
<copy todir="target">
    <fileset dir="${buildPath}" includes="*.jar" />
</copy>

其中 ${buildPath} 指向“Java 构建路径”。这只是一个例子,并不起作用

请注意,我不想将每个 jar 单独放在 build.xml 中,而是要使用 include="*.jar" 之类的东西,所以如果有人更改 "Java Build Path" ,我不必更改构建.xml

4

3 回答 3

2

Eclipse 构建路径信息存储在.classpath文件中,您可能可以从中解析出简单的位(指向项目工作空间内或外部具有绝对路径的单个 JAR 文件的条目),但这只会让您到目前为止 -还有其他类型的类路径条目,例如基于“类路径变量”的条目、对工作区中其他项目的引用或 Eclipse 插件提供的其他类型的容器。例如,我有 GGTS 插件(用于 Groovy 和 Grails),而我的 Grails 项目.classpath根本没有明确列出的 JAR,它只是说

<classpathentry kind="con" path="org.grails.ide.eclipse.core.CLASSPATH_CONTAINER"/>

有一个Ant4Eclipse项目声称可以帮助解决这个问题,但最近的版本(“里程碑 4”)是从 2010 年中期开始的,我不知道它与最近的 Eclipse 配合得如何。

更好的方法可能是使用Ivy以声明方式管理您的依赖项,并让 Ant 构建Eclipse 项目(使用IvyDE)从那里获取它们的库。当您想要添加或删除依赖项时,您只需编辑ivy.xml文件,Ant 和 Eclipse 都会在下一次构建时获取更改。

于 2013-03-29T20:40:08.213 回答
2

使用 xmlproperty 任务将 .classpath 读入属性值。

<xmlproperty file=".classpath" collapseAttributes="true" delimiter=";" />

然后在路径中设置该值

<path id="eclipse.classpath">
    <pathelement path="${classpath.classpathentry.path}"/>
</path>


<target name="compile" depends="init">

    <javac srcdir="${src}" destdir="${build}" updatedProperty="compiled">
        <classpath refid="eclipse.classpath"/>
    </javac>
</target>
于 2014-04-09T16:25:03.530 回答
1

eclipse 中的Java 构建路径实际上是由.classpatheclipse 项目中的文件支持的。因此,如果您查看该文件,您将看到 eclipse 使用的所有路径。您可以使用 ant 将它们解析出来。例如,我有一个简单的项目,它有一个指向标准 JRE 库的Java 构建路径和一个指向另一个项目(数据集工具)的 jar 的链接。这是我的.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
    <classpathentry kind="lib" path="/dataset-tools/target/dataset-tools.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

因此,如您所见,如果您将一个新 jar 添加到您的Java 构建路径,它会反映在.classpath文件中:

    <classpathentry kind="lib" path="/dataset-tools/target/dataset-tools.jar"/>

您可以使用 ant 来解析该文件以查找classpathentry带有 kind 的这些元素lib这与此处给出的答案相同。

于 2013-03-29T20:11:57.543 回答