The subject pretty much asks the question, but for more detail, I have the following in my build.gradle
:
jar {
manifest {
attributes("Built-By": "Gradle")
attributes("Build-Version": version)
attributes("Main-Class": "somePackage.SomeClass")
}
}
When building, since the manifest is auto-generated, it always thinks the jar
task is out of date, even if nothing has changed in the code.
Ideally, I'd like to be able to check to see if the version is the same as the last build. If it is, and if previous task dependencies (compileJava
et al) are all UP-TO-DATE
, I'd like the jar task to report UP-TO-DATE
as well.
Failing that, I'd be pretty happy if I could just get the jar task to ignore the manifest file altogether.
For an individual jar task this isn't such a big deal, but as soon as one jar reports that it's not UP-TO-DATE
, all the tasks that depend on it then have to re-compile, re-jar, etc etc, which makes builds take way longer than they actually need to. And since the very first jar task in my dependency path reports that it's not up-to-date because of the manifest issue, that means the whole thing is forced to recompile/re-jar/re-war/re-ear/etc every-single-time, and we're talking about a few hundred thousand lines of code here.
Anyway, if anybody knows of a way to solve this little annoyance I'd be grateful
EDIT
I also have a zip task that depends on the jar task:
task zip(type:Zip, dependsOn:jar) {
from jar
include jar.archiveName
from '.'
include 'run.bat'
}
Running this command:
gradlew :myProject:zip -Pversion=1.0
I consistently get the following output every time, even if I run it twice in a row with no changes anywhere:
:myProject:compileJava UP-TO-DATE
:myProject:processResources UP-TO-DATE
:myProject:classes UP-TO-DATE
:myProject:jar
:myProject:zip
Task inputs, outputs, and dependencies Gradle uses this information to determine if a task is up-to-date and needs to perform any work. If none of the inputs or outputs have changed, Gradle can skip that task. Altogether, we call this behavior Gradle's incremental build support.
To skip any task from the Gradle build, we can use the -x or –exclude-task option. In this case, we'll use “-x test” to skip tests from the build. As a result, the test sources aren't compiled, and therefore, aren't executed.
Check your Internet connection. If internet speed is very slow gradle build will also take long time to build. I check by change my wifi internet connection with another one good speed connection. Now build time is normal.
Given above declaration, and assuming that code hasn't changed, the jar
task should only be out-of-date if version
has changed. (Running with --info
will tell you which file(s) have changed.) Best solution is to prevent that, at least at development time. (E.g. don't set version
to new Date()
.)
Also note that out-of-date does not cascade. Downstream tasks will only rerun if their inputs or outputs have changed. They don't care if upstream tasks were up-to-date or not.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With