【问题标题】:Omit class file from jar in gradle从 gradle 中的 jar 中省略类文件
【发布时间】:2017-04-16 04:02:38
【问题描述】:

我正在编写一个修改类文件的 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
    }
}

还有我的构建脚本

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 将类编译到不同的目录并将我的类放在默认位置吗?

【问题讨论】:

    标签: java gradle source-sets


    【解决方案1】:

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

    sourceSet.getOutput().setClassesDir(outputDir);
    

    并将您的输出存储在outputDir 中。以下所有的依赖任务都将使用新设置的 classesDir,尤其是 jarrun,当任务是它们的依赖项时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2019-04-23
      • 2016-01-29
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多