Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渐变增量构建-是否可以在最新检查中忽略清单?_Java_Jar_Gradle_Build.gradle - Fatal编程技术网

Java 渐变增量构建-是否可以在最新检查中忽略清单?

Java 渐变增量构建-是否可以在最新检查中忽略清单?,java,jar,gradle,build.gradle,Java,Jar,Gradle,Build.gradle,主题几乎提出了这个问题,但要了解更多细节,我的build.gradle: jar { manifest { attributes("Built-By": "Gradle") attributes("Build-Version": version) attributes("Main-Class": "somePackage.SomeClass") } } 在构建时,由于清单是自动生成的,所以它总是认为jar任务已经过时,即使代码中没

主题几乎提出了这个问题,但要了解更多细节,我的
build.gradle

jar {
    manifest {
        attributes("Built-By": "Gradle")
        attributes("Build-Version": version)
        attributes("Main-Class": "somePackage.SomeClass")
    }
}
在构建时,由于清单是自动生成的,所以它总是认为
jar
任务已经过时,即使代码中没有任何更改

理想情况下,我希望能够检查版本是否与上次版本相同。如果是,并且如果以前的任务依赖项(
compileJava
等)都是
最新的
,我希望jar任务也报告
最新的

如果做不到这一点,我很高兴能让jar任务完全忽略清单文件

对于单个jar任务来说,这并不是什么大问题,但一旦一个jar报告它不是最新的,依赖它的所有任务都必须重新编译、重新jar等等,这使得构建所需的时间比实际需要的时间更长。由于依赖路径中的第一个jar任务报告由于清单问题而不是最新的,这意味着每次都要重新编译/re-jar/re-war/re-ear/etc,我们这里讨论的是几十万行代码

无论如何,如果有人知道解决这个小麻烦的办法,我会很感激的

编辑

我还有一个zip任务,它依赖于jar任务:

task zip(type:Zip, dependsOn:jar) {
    from jar
    include jar.archiveName
    from '.'
    include 'run.bat'
}
运行此命令:

gradlew :myProject:zip -Pversion=1.0
我每次都会得到以下输出,即使我连续运行两次,在任何地方都没有更改:

:myProject:compileJava UP-TO-DATE
:myProject:processResources UP-TO-DATE
:myProject:classes UP-TO-DATE
:myProject:jar
:myProject:zip

给出上述声明,并假设代码没有更改,
jar
任务只有在
version
已更改时才会过期。(使用
--info
运行将告诉您哪些文件已更改。)最好的解决方案是至少在开发时防止这种情况发生。(例如,不要将
版本设置为
新日期()


还请注意,过期不会层叠。下游任务只有在其输入或输出发生更改时才会重新运行。他们不在乎上游任务是否是最新的。

Peter-我一直在通过-Pversion=1.0在命令行上设置“version”,所以每次都是一样的。我认为过时的原因是级联,比如说任务B取决于任务A的输出,如果任务A过时,任务B就会重新编译、重新jars等等。我在所有构建中都注意到了这一点,但在这种特殊情况下,它足够小,可以很容易地看到行为。我使用上面的代码构建我的jar,然后我有一个依赖于jar任务的zip任务。代码不变,版本保持在1.0。查看我的编辑,以便查看行为。每次我要说的是,如果A的输出(例如,Jar内容)发生了变化,B将重新编译,我就会得到相同的结果。A是否是最新的并不重要。如果生成脚本中没有特殊安排,则无法从命令行设置预定义的模型属性,如
project.version
<代码>-P
始终创建新属性。(实际上,
-P
-D
没有太大区别)在
-Pversion
的情况下,您将得到一个新属性,该属性被
项目.version
隐藏。您可以通过运行
--info
,记下更改的文件,找出生成之间的更改,然后将它们与以前的副本进行比较。好的,问题是build date属性是从根项目的
子项目
块添加的,尽管(我认为)我通过将上面的manifest块放在子项目中覆盖了它。有没有办法完全覆盖根项目的subprojects块中指定的清单块?