gpt4 book ai didi

java - 为 ant javac 任务使用系统类路径

转载 作者:搜寻专家 更新时间:2023-10-30 23:00:46 35 4
gpt4 key购买 nike

我希望 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 是工作目录。)我浏览了一会儿文档并提出了两种尝试。第一个是将属性 classpath="${java.class.path}" 添加到 javac 标记。这会将一个非常长的类路径传递给编译器,列出来自 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 仓库中有 jar 。那怎么可能呢?

最佳答案

在 javac 任务中设置 includeJavaRuntime=true。

<target name="build">
<mkdir dir="${obj}" />
<javac srcdir="${src}" destdir="${obj}"
includes="**/*.java"
excludes="**/package-info.java **/deprecated/*.java"
includeAntRuntime="no" includeJavaRuntime="true"
debug="true" debuglevel="source,lines">
<compilerarg value="-Xlint"/>
</javac>
</target>

关于java - 为 ant javac 任务使用系统类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917697/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com