从 gradle 中的 jar 中省略 class 文件
Omit class file from jar in gradle
我正在编写一个 gradle 插件来修改 class 文件。我希望任务在所有生成的 class 文件上 运行 并 替换 它们。这是我目前所拥有的:
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中,class出现了两次。我如何告诉 gradle 不要在默认的 classes 目录中包含 classes?
或者,我可以告诉 gradle 将 classes 编译到不同的目录并将我的 classes 放在默认位置吗?
您只需在任务操作结束时调用
sourceSet.getOutput().setClassesDir(outputDir);
并将您的输出存储在 outputDir
中。以下所有依赖任务将在新设置的 classesDir 上获取,尤其是 jar
和 run
当任务是它们的依赖项时。
我正在编写一个 gradle 插件来修改 class 文件。我希望任务在所有生成的 class 文件上 运行 并 替换 它们。这是我目前所拥有的:
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中,class出现了两次。我如何告诉 gradle 不要在默认的 classes 目录中包含 classes?
或者,我可以告诉 gradle 将 classes 编译到不同的目录并将我的 classes 放在默认位置吗?
您只需在任务操作结束时调用
sourceSet.getOutput().setClassesDir(outputDir);
并将您的输出存储在 outputDir
中。以下所有依赖任务将在新设置的 classesDir 上获取,尤其是 jar
和 run
当任务是它们的依赖项时。