gex*_*ide 6 java ant build gradle maven
tl; dr版本:有没有办法告诉ant/maven/gradle跟踪文件依赖性,只重建过时的文件,即比它们的依赖项更旧?
下面的长版:
我用make
了很多年的C/C++.虽然它有时可能很麻烦,但它至少对我来说是最重要的事情之一:它跟踪文件依赖性,只有当文件中的任何依赖项比文件本身更新时才重建文件.这很棒,它可以大大减少构建时间,尤其是在执行大量代码生成工具时.
我在我的项目中使用了大量代码.但是,代码生成需要一些时间,生成的代码必须在之后编译,因此浪费了更多的时间.大多数生成的代码仅依赖于少量文件,例如,在生成解析器时的语法规范.使用make
,我只需将依赖项设置为规范文件,并且仅在规范更改时重建解析器.在我的一些项目中,生成代码需要80-90%的时间来完成重建.因此,不必重建生成的代码就可以将我的构建过程加速几乎10倍.
人们不使用make
java,所以即使我喜欢make,我也是java项目的常用java构建工具.似乎我尝试的构建工具(ant,gradle,maven)不提供这种依赖性跟踪.相反,它们依赖于被调用的应用程序或任务来执行此操作(例如,ant copy
任务仅复制过时的文件).但是,我使用的代码生成程序根本不提供这样的检查.无论输入规范是否过时,它们总是执行完整的代码生成.
因此,我在java中的构建时间越来越长.他们花了很长时间才将代码生成从通常的构建周期中带入一个单独的目标,并且只在更改任何spec文件后手动执行此目标.但当然,这很容易出错,因为我有时会忘记它.我的构建过程现在感觉完全有缺陷.
有没有办法在我提到的任何构建工具(ant,gradle,maven)中执行依赖关系跟踪和重建过时的文件,我不知道?
如果没有,那么为什么呢?为什么java社区似乎不关心这个功能?特别是当涉及大量代码生成时,这样的特征非常重要,特别是如果使用的代码生成工具本身不提供该特征.
如果没有,那么有没有其他java构建工具有这样的跟踪?
Maven 可以用于此目的。maven如何只编译修改过的java文件?是你问题的答案:
我只是想知道这一点,当我在不执行“clean”的情况下进行 mvn install 时,maven 仅编译修改后的 java 文件
问题是您重新生成所有文件。然后你就失去了对未修改文件的跟踪(所有迭代工具都会比较 .class 和 .java 之间的最后修改时间戳)。您可以将代码生成限制为仅真正修改过的文件吗?
如果不能,一个想法可能是在另一个目录中生成文件并编写一个脚本来仅检查和替换编译“区域”中已修改的文件(通过比较内容)。之后您可以运行 mvn install。
归档时间: |
|
查看次数: |
1698 次 |
最近记录: |