Some refactorings
Explicitly set compile dependencies
Set inputs during evaluation phase so gradle can check for changes