2017-04-16 84 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,當任務是它們的依賴關係時。