2017-04-16 15 views
0

クラスファイルを変更する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') 

問題は、今コンパイルした瓶に、クラスが2回があるということです。どのようにして、デフォルトのクラスディレクトリにクラスを含めないようにgradleに指示できますか?


また、gradleにクラスを別のディレクトリにコンパイルし、クラスをデフォルトの場所に配置するように指示できますか?

答えて

0

あなたは、単に、あなたのタスク・アクションの終わりに、

sourceSet.getOutput().setClassesDir(outputDir); 

を呼び出し、outputDirであなたの出力を保存することができます。以下の依存タスクはすべて、新しく設定されたclassesDir(特にjarrun)に依存します。

関連する問題