作为构建过程的一部分,我们使用SonarQube分析源代码.
这样做的一个问题是我们使用Lombok注释并且SonarQube没有很好地处理它 - 我们的代码需要'delombok'ed.
Delomboked源删除了注释,并使用编译器使用的最终代码替换源文件.
这可以在gradle中完成(见这里).
好吧,部分.通常,Ant任务可用于delombok源.代码示例如下: -
task delombok {
// delombok task may depend on other projects already being compiled
dependsOn configurations.compile.getTaskDependencyFromProjectDependency(true, "compileJava")
// Set up incremental build, must be made in the configuration phase (not doLast)
inputs.files file(srcJava)
outputs.dir file(srcDelomboked)
doLast {
FileCollection collection = files(configurations.compile)
FileCollection sumTree = collection + fileTree(dir: 'bin')
ant.taskdef(name: 'delombok', classname: 'lombok.delombok.ant.DelombokTask', classpath: configurations.compile.asPath)
ant.delombok(from:srcJava, to:srcDelomboked, classpath: sumTree.asPath)
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,我相信我需要一个预配置的蚂蚁系统(我还没有让它工作).
另一种方法是使用Maven lombok:delombok插件(见这里).但是我不知道如何做到这一点,如果这还需要预先配置的环境.
我不确定哪种方法最好.不需要预先配置的构建系统并且可以从gradle/gradlew完全工作的方法将是优选的.
最终目标是进行"delombok"项目任务,基本上执行以下操作:
java -jar lombok.jar …Run Code Online (Sandbox Code Playgroud) 我要做的是将我项目中预先创建的manifest.mf文件与gradle中jar任务的动态创建的清单文件结合起来.
有没有办法做到这一点?目前我完全生成我的清单文件: -
jar.doFirst {
manifest {
def requiredProjects = ''
configurations.compile.getAllDependencies().withType(ProjectDependency).each {dep->
def dependantProjects = dep.getDependencyProject()
def projects = project(dependantProjects.path).libsDir.list().findAll{it.endsWith('.jar')}
projects.removeAll(projects.findAll{it.endsWith('test.jar')})
def requiredProject = projects.join(' ')
requiredProjects += requiredProject.replaceAll(/ /,'%20') + ' '
logger.info 'Required Project: ' + requiredProject
}
logger.info 'Required requiredProjects: ' + requiredProjects
def compileFiles = configurations.compile.files{ it instanceof ExternalDependency }.collect {
File file = it
"lib/${file.name}"
}.join(' ')
def manifestPath = requiredProjects + compileFiles
logger.info 'Manifest: '+ manifestPath
attributes 'Class-Path': manifestPath
attributes 'Build-date': new Date(); …Run Code Online (Sandbox Code Playgroud)