java - 添加到 Java 类路径会破坏 ant

标签 java ant classpath

我希望在我的类路径中包含某个 JAR,以便通过 Jython REPL 轻松访问。所以在我的 .bashrc 中我输入:

export CLASSPATH=:/home/tmacdonald/path/to/jar/thing.jar

但是,这会破坏 ant 编译该 JAR 的能力,并且可以从不同的子包编译 JAR:

$ ant jar
Invalid implementation version between Ant core and Ant optional tasks.
 core    : 1.8.0 in file:/usr/share/ant/lib/ant.jar
 optional: 1.5.1 in file:/home/tmacdonald/path/to/jar/lib/gt2-2.3.3/ant-optional-1.5.1.jar
$ echo $CLASSPATH
:/home/tmacdonald/path/to/jar/thing.jar

更改类路径可以修复它:

$ export CLASSPATH=
$ !ec
echo $CLASSPATH

$ ant jar
[Compiles successfully.]

但是必须不断更改我的类路径似乎很尴尬,而且不是正确的事情,具体取决于我是想运行 ant 还是 Jython REPL。我承认我对 ant 和类路径的了解相当薄弱。我只是将类路径视为“Java 库的 PATH;或 Java 的 PYTHONPATH”,并且我只对我继承的现有 ant 配置文件添加了一些小更改 - 我从来不需要设置一个。

所以我有兴趣听听到底发生了什么(顺便说一句,这是如何导致我的问题的),这样我就可以得到更多的教育,当然我也想要一个解决方案。谢谢!

最佳答案

我认为 Ant 不应该知道或关心环境变量。正确的方法是在 Ant build.xml 本身内设置 CLASSPATH。

以下是我在 Ant build.xml 文件中使用的生产和测试类路径:

<path id="production.class.path">
    <pathelement location="${production.classes}"/>
    <pathelement location="${production.resources}"/>
    <fileset dir="${production.lib}">
        <include name="**/*.jar"/>
    </fileset>
</path>

<path id="test.class.path">                            
    <path refid="production.class.path"/>
    <pathelement location="${test.classes}"/>
    <pathelement location="${test.resources}"/>
    <fileset dir="${test.lib}">
        <include name="**/*.jar"/>
    </fileset>
</path>

正如您所看到的,没有也不应该有对 ${classpath} 的引用。

关于java - 添加到 Java 类路径会破坏 ant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693990/

相关文章:

java - 访问同一个 jar 中的属性文件

oracle - WildFly - 将 JAR 添加到类路径

scala - 如何从 shell 作为普通命令行程序运行 sbt 主类?

java - 构造函数 Object(Context, int, List<DrawerItem>) 未定义

java - 攻击者可以将 sql 或 javascript 注入(inject) java POJO 中吗?

Groovy + Antbuilder : How to use Grape to with taskdef?

java - 可能错误责任的静态分析

ant - 如何格式化输出到控制台的ant任务名称以包含项目名称?

java - CXF 2.x 和 Jboss AS 7.1.1

java - 过滤 Guava Multimap