
eu.appsatori.gradle.fatjar.tasks.PrepareFiles.groovy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-fatjar-plugin Show documentation
Show all versions of gradle-fatjar-plugin Show documentation
Gradle plugin to build fat JARs with dependencies.
package eu.appsatori.gradle.fatjar.tasks
import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTree
import org.gradle.api.file.FileTreeElement
import org.gradle.api.file.FileCollection.AntType
import org.gradle.api.specs.Spec
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.util.PatternSet
import org.gradle.api.tasks.util.PatternFilterable
class PrepareFiles extends DefaultTask {
@InputDirectory @Optional File resourcesDir
@InputDirectory @Optional File classesDir
@InputFiles @Optional FileCollection compileClasspath
@OutputDirectory File stageDir
@Delegate PatternFilterable filter = new PatternSet()
PrepareFiles(){
super()
filter.include 'META-INF/services/*'
}
@TaskAction prepareFiles(){
File resourcesDir = getResourcesDir()
File classesDir = getClassesDir()
FileCollection compileClasspath = getCompileClasspath()
File stageDir = getStageDir()
FileCollection files = getFatJarFiles()
if(!files.isEmpty()){
ant.copy(todir: stageDir){
files.addToAntBuilder(ant, 'fileset', AntType.FileSet)
}
}
if(resourcesDir?.exists()){
ant.copy(todir: stageDir) { fileset(dir: resourcesDir) }
}
if(classesDir?.exists()){
ant.copy(todir: stageDir){ fileset(dir: classesDir) }
}
FileTree filesToMerge = files.asFileTree.matching filter
ant.delete {
fileset dir: stageDir, includes: filter.includes.join(','), excludes: filter.excludes.join(',')
}
filesToMerge.visit { FileTreeElement file ->
if(file.isDirectory()) return
File theFile = new File(stageDir, file.relativePath.toString())
if(!theFile.exists()){
theFile.createNewFile()
}
theFile.append file.file.text.trim() + '\n'
}
}
private FileCollection getFatJarFiles(){
FileCollection files = project.files([])
if(getResourcesDir()?.exists()) files += project.fileTree getResourcesDir()
if(getClassesDir()?.exists()) files += project.fileTree getClassesDir()
def collected = getCompileClasspath().collect {
it.isDirectory() ? project.fileTree(it) : project.zipTree(it)
}
for(f in collected) {
files += f
}
files
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy