Given the following inconsistent file structure and build.gradle file, the vast majority of Gradle build features work but some do not. We should warn users when we encounter this scenario to avoid confusion or unnecessarily broken builds.
File tree
.
├── build.gradle
└── src
├── java
│ └── java (<--- extra java/ directory here)
│ └── com
│ └── google
│ └── jedo
│ └── IncDep
│ └── DepTwo.java
├── main
│ └── java
│ └── com
│ └── google
│ └── jedo
│ └── IncrementalJava
│ ├── DepOne.java
│ └── Main.java
build.gradle
apply plugin: ‘java’
sourceSets {
main {
java
{
srcDir 'src/java'
srcDir 'src/main/java'
}
}
}
compileJava
{
//enable incremental compilation
options.incremental = true
}
From Gary:
When you specify the "-d" option to the java compiler (destination directory) it derives the location of the class files from the package of the class and not the path of the source file. For example, if I run `javac java/com/google/jedo/IncDep/DepTwo.java`, it puts the class file in the same directory as the source file. On the other hand, if I say `javac -d /tmp java/com/google/jedo/IncDep/DepTwo.java` it creates the directory structure based on the package and drops the class in /tmp/com/google/jedo/IncDep. Since we write the class files to a separate directory, the compiler just sort of fixes the issue with the screwed up source folder.
|