当前位置: 首页 > 面试题库 >

用ant只编译部分源代码树

楚天宇
2023-03-14
问题内容

说我的源在我的src /树中(可能在我的测试/树中)。说我只想编译那棵树的 一部分
。我可能要这样做的原因多种多样。仅作为示例,我可能想要创建最小的jar(不包括某些类),或者我想要最快的编译时间来进行编译。我绝对想编译所有依赖项!

可以使用以下命令从命令行轻松实现:

javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java

现在,如何使用蚂蚁来做到这一点?javac ant
任务将编译所有内容:

将对源目录和目标目录进行递归扫描,以编译Java源文件。

可以使用excludesincludes参数,但为此存在问题。实际上,似乎必须显式设置所有includes(不是自动的依赖关系查找),
甚至最糟糕的
是,exclude优先于include:

当同时使用包含和排除时,仅使用匹配至少一个包含模式且不匹配 任何 排除模式的文件/目录。

因此,您不能使用

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
            excludes="**/*.java" includes="src/path/to/MyClass.java" />

因为它不会编译任何东西:-(

有什么方法可以javac用ant 实现这个简单的命令行?

编辑:谢谢您的回答,萨迪,我接受了,因为它的确以我想知道的方式工作。但是我有几条评论(太长了,无法在您的答案的评论字段中显示):

1)我确实阅读了文档(请参阅上面的链接),但尚不清楚includes实际上您是否还排除了其他所有内容

2)当你只includes蚂蚁记录类似

[javac] Compiling 1 source file to /my/path/to/build

即使依赖关系使其编译(远远超过一个)源文件。


问题答案:

为什么要排除和包含?如果您至少有一个包含,则只有在明确包含文件的情况下才编译文件。所以这应该工作:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
        includes="src/path/to/MyClass.java" />

或更灵活地:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath">
    <include name="src/path/to/MyClass.java"/>
    <include name="src/path/to/AnotherClass.java"/>
</javac>

要在jar中仅包含某些包或类,请使用文件集属性

<jar jarfile="${outlib}/something.jar">
    <fileset dir="${build.dir}">
        <include name='src/path/to/classes' />
    </fileset>
</jar>

同样,您可以使用多个包含来组合单独的程序包。尝试使用include并阅读文档,您一定会找到所需的答案。



 类似资料:
  • 编译solidity源代码 通过solc编译器编译solidity代码到字节码。你可以参考solidity安装文档在本地安装编译器。 编写solidity代码运行: $ solc <contract>.sol --bin --abi --optimize -o <output-dir>/ bin和ABI编译器参数都需要充分利用web3j中的智能合约。 bin,输出包含十六进制编码的solidit

  • 问题内容: 现在显然,解析器本身并没有什么用(除了静态分析)。我想将转换应用于AST,然后将其编译回源代码。应用转换不是什么大问题,普通的Visitor模式应该可以。 我目前的问题是如何将AST编译回源代码。我基本上看到两种可能性: 使用一些预定义的方案编译代码 保留原始代码的格式,并仅在已更改的节点上应用1.。 现在,我想专注于1.,因为2.似乎很难完成(但是,如果您有关于此的提示,我想听听他们

  • 有时,我们需要从源代码重新编译一个Kali包.幸运的是用APT下载源代码包,进行必要的修改后再用Debian工具重新编译是如此的简单.此例中,为了添加额外的Mifare Key硬编码到mifare格式化工具,我们将重新编译libfreefare这个包. 下载包的源代码 # Get the source package apt-get source libfreefare cd libfreefar

  • 有些情况下,比如我们自己从Github下载了最新的代码,或者自己临时修改了一点代码,想要编译后的Build文件夹的内容,需要自行编译源码,这里介绍一下编译的方法 下载源码之后,可以发现根目录存在一个gulpfile.js文件,编译源码就是使用 gulp 编译的成果有四部分, – 生成Apps文件夹,包括helloworld程序和沙盒Sandcastle – 编译后的部署环境下的Cesium文件夹

  • 如果你不知道怎么从 github 上下载 Nutz 的源代码,请看 从 Git 编译 一节 编译通常是个麻烦的问题,依赖关系啊,环境变量啊,等等,全是些没有技术含量的东 东,但是却能搞的你非常头疼。虽然编译 Nutz 是一个相对简单的工作 -- 它编译 的时候不需要依赖第三方 jar 包,但是还是有一些工作要做的。 从我个人的情况来看,我经常在如下三个环境下进行 Nutz 的开发: 公司 - Vi

  • 我试图遵循下面提到的两个步骤: 1)下载的源代码 https://sourceforge.net/projects/hunspell/files/hyphen/2.8/hyphen-2.8.8.tar.gz/download 连字符-2.8.8$./example~/dev/smc/hyphenation/hi_in/hyph_hi_in.dic~/hi_sample.text 我已经下载并解压缩