根据编译和运行时类路径创建 jar 资源

Create jar resources while depending on compile and runtime classpath

我正在尝试将 jasperreports 模板与我的 java 代码一起编译。为此,我使用了 this plugin that is adjusted to work with gradle properties 的私有分支。现在我试图找到一种方法让这个插件提供资源,这些资源将被放入生成的 jar 文件中,并且是使用当前项目的编译和运行时类路径创建的。

apply plugin: 'com.github.gmazelier.jasperreports'
compileAllReports {
    addClasspath(project.sourceSets.main.compileClasspath)
    addClasspath(project.sourceSets.main.runtimeClasspath)
}

sourceSets.main.resources.srcDir compileAllReports

addClasspath实现如下:

public void addClasspath(FileCollection fileCollection) {
    Provider<List<File>> provider = fileCollection.getElements()
            .map(files -> files.stream().map(FileSystemLocation::getAsFile).collect(Collectors.toList()));
    classpath.addAll(provider);
}

其中 classpath 是以下 属性 在名为 compileAllReports

的任务中
private final ListProperty<File> classpath;

@InputFiles
public ListProperty<File> getClasspath() {
    return classpath;
}

我的问题是,这样做会导致以下任务依赖循环:

:classes
\--- :processResources
    \--- :compileAllReports
        \--- :classes (*)

有什么方法可以在不依赖 :classes 的情况下访问 compileruntime 类路径(为什么对 :compileJava 的依赖不够?类路径应该已经exist a this time) 或者添加一个新的资源目录而不添加对 :processResources 的依赖(坏主意,因为所有资源都被复制到这个任务中)

我设法通过添加 project.configurations.*Classpath 而不是 project.sourceSets.main.*Classpath 来解决我的问题。

因此我的build.gradle包含以下代码而不是问题的第一部分

apply plugin: 'com.github.gmazelier.jasperreports'
compileAllReports {
    addClasspath(project.configurations.compileClasspath)
    addClasspath(project.configurations.runtimeClasspath)
}

sourceSets.main.resources.srcDir compileAllReports