2017-04-16 36 views
0

我正在编写一个修改类文件的gradle插件。我希望任务能够在所有生成的类文件上运行,并且将替代它们。这是我到目前为止有:从gradle中忽略jar文件

public class InstrumenterTask extends DefaultTask { 

    private File outputDir; 
    private SourceSet sourceSet; 

    public void setOutputDir(File outputDir) { 
     this.outputDir = outputDir; 
    } 

    public void setSourceSet(SourceSet sourceSet) { 
     this.sourceSet = sourceSet; 
    } 

    @TaskAction 
    public void processSourceSet() { 
     File classesDir = sourceSet.getOutput().getClassesDir(); 
     Path classesPath = classesDir.toPath(); 
     Files.walk(classesPath).forEach(this::processClassFile); 
    } 
    private void processClassFile(File inputFile) { 
     // Omitted for brevity. Result is in outputDir 
    } 
} 

和我buildscript

apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = 'user.Main' 

jar { 
    manifest { 
     attributes 'Main-Class': 'user.Main' 
    } 
} 

task(mainInstrumenter, type: InstrumenterTask) { 
    outputDir = new File(buildDir, 'instrumentedClasses') 
    sourceSet = sourceSets.main 
} 

mainInstrumenter.dependsOn classes 
jar.dependsOn mainInstrumenter 
sourceSets.main.output.dir new File(buildDir, 'instrumentedClasses') 

现在的问题是,在编译罐子,类是有两次。我如何告诉gradle不要将类包含在默认类dir中?


或者,我可以告诉gradle将类编译到不同的目录并将我的类放在默认位置?

回答

0

您可以简单地说,你的任务活动结束后,调用

sourceSet.getOutput().setClassesDir(outputDir); 

和存储您的输出在outputDir。以下所有依赖任务都将在新设置的classesDir中启动,特别是jarrun,当任务是它们的依赖关系时。