我希望javac任务能够使用系统类路径中的jar包,这里所说的系统类路径是指在启动ant之前在shell环境中设置的类路径。该类路径为:
CLASSPATH=D:\local\lib\java\*;.;C:\lib\java\*;C:\lib\java\db\*
在我的系统上,我有许多项目都使用的流行jar包。我在构建文件中使用的基本代码片段是:
<target name="build">
<mkdir dir="${obj}" />
<javac srcdir="${src}" destdir="${obj}"
includes="**/*.java"
excludes="**/package-info.java **/deprecated/*.java"
includeAntRuntime="no" debug="true" debuglevel="source,lines"
>
<compilerarg value="-Xlint"/>
</javac>
</target>
那样,ant只会将输出目录作为类路径传递。
[javac] '-classpath'
[javac] 'D:\dev\tbull-projects\jsonc\obj'
(jsonc是我正在工作的项目,
D:\dev\tbull-projects\jsonc
是工作目录。)我浏览了一段时间的文档,并尝试了两种方法。第一种是在javac标签中添加属性 classpath =“ $ {java.class.path}”
。这将向编译器传递一个非常长的类路径,列出ant自己的lib目录中的每个单独的jar文件,最终是来自JDK的tools.jar。这不是我想要的类路径。
第二次尝试是设置
<property name="build.sysclasspath" value="first" />
在调用javac之前,这让我朝着正确的方向前进。现在这些行是输出中的一部分:
dropping D:\dev\tbull-projects\jsonc\D:\local\lib\java\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\lib\java\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\lib\java\db\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\Program Files\Java\jdk1.6.0_18\jre\lib\sunrsasign.jar from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\Program Files\Java\jdk1.6.0_18\jre\classes from path as it doesn't exist
好的,你可以想象这些路径实际上并不存在。我不明白为什么Ant会这样构建它们。难道它不知道如何在Windows上进行路径运算吗?
也许我的方法在更根本的方面存在缺陷,所以我会告诉你我实际上想要什么。我正在开发这个项目(一个库),它使用另一个库。该项目将是开源的,因此我希望其他开发人员在下载依赖库并将其放置在他们的类路径中之后能够构建它。
从我在其他关于Ant+classpath的问题中看到的情况来看,似乎将依赖库与源代码一起分发是一种自定义方式(因此类路径可以像./libs一样)。但我肯定不想在我的git repo中有jar文件。那怎么办呢?