Sreenivas
02/07/2025, 11:38 AMSreenivas
02/07/2025, 11:39 AMpackage com.myorg.plugins
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction
import java.security.MessageDigest
class ChecksumPluginV3 implements Plugin<Project> {
void apply(Project project) {
def extension = project.extensions.create("checksumConfig", ChecksumPluginExtension3)
project.tasks.register("computeFileChecksums", ChecksumTask3)
/*project.tasks.register("computeFileChecksums", ChecksumTask3) { task ->
task.inputFiles.set(extension.inputFiles)
task.hashAlgorithms.set(extension.hashAlgorithms)
task.outputDir.set(extension.outputDir)
task.outputFormat.set(extension.outputFormat)
}*/
}
}
abstract class ChecksumTask3 extends DefaultTask {
@Input
@Optional
List<String> inputFiles
@Input
@Optional
List<String> hashAlgorithms
@Input
@Optional
String outputDir
@Input
@Optional
String outputFormat
@TaskAction
void computeChecksums() {
def projectDir = getProject().projectDir
println("inputFiles: ${inputFiles}")
println("outputDir: ${outputDir}")
println("hashAlgorithms: ${hashAlgorithms}")
println("outputFormat: ${outputFormat}")
}
}
abstract class ChecksumPluginExtension3 {
abstract List<String> inputFiles
abstract List<String> hashAlgorithms
abstract String outputDir
abstract String outputFormat
}
Sreenivas
02/07/2025, 11:40 AMinputFiles: null
outputDir: null
hashAlgorithms: null
outputFormat: null
Sreenivas
02/07/2025, 11:41 AMSreenivas
02/07/2025, 11:42 AM// Configure the extension
project.getExtensions().configure(ChecksumPluginExtension3.class, extension -> {
extension.setInputFiles(Collections.singletonList("src/test/resources/testfile.txt"));
extension.setHashAlgorithms(Collections.singletonList("SHA-1"));
extension.setOutputDir("build/checksums");
extension.setOutputFormat("text");
});
// Execute the task
task.getActions().forEach(action -> action.execute(task));
Sreenivas
02/07/2025, 11:51 AMproject.tasks.register("computeFileChecksums", ChecksumTask3) { task ->
task.inputFiles.set(extension.inputFiles)
task.hashAlgorithms.set(extension.hashAlgorithms)
task.outputDir.set(extension.outputDir)
task.outputFormat.set(extension.outputFormat)
}
I'm getting NPE at
task.inputFiles.set(extension.inputFiles)
Trace:
Caused by: java.lang.NullPointerException: Cannot invoke method set() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:44)
Sreenivas
02/07/2025, 11:53 AMproject.tasks.register("computeFileChecksums", ChecksumTask3) { task ->
task.inputFiles = extension.inputFiles
task.hashAlgorithms = extension.hashAlgorithms
task.outputDir = extension.outputDir
task.outputFormat = extension.outputFormat
}
but still getting like this:
inputFiles: null
outputDir: null
hashAlgorithms: null
outputFormat: null
Niels Doucet
02/07/2025, 12:31 PMVampire
02/07/2025, 1:42 PMString
nor @Input
is appropriate for input files or output directory.
Former should probably be a `ConfigurableFileCollection`with @InputFiles
and latter a DirectoryProperty
with @OutputDirectory
.