繁体   English   中英

从gradle中的jar中省略类文件

[英]Omit class file from jar in gradle

我正在编写用于修改类文件的gradle插件。 我希望任务在所有生成的类文件上运行并替换它们。 这是我到目前为止的内容:

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')

现在的问题是,在已编译的jar中,该类存在两次 如何告诉gradle不要在默认的类目录中包含这些类?


另外,我可以告诉gradle将类编译到其他目录,然后将类放在默认位置吗?

您可以在任务操作结束时简单地调用

sourceSet.getOutput().setClassesDir(outputDir);

并将您的输出存储在outputDir 下面所有相关的任务都将在新设置的classesDir上拾取,尤其是jar并在任务为它们的依赖项时run

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM