Java 如何为依赖项注册源集的输出

Java 如何为依赖项注册源集的输出,java,gradle,Java,Gradle,我有一个应用了java插件的项目,还有一个附加的源代码集 project(':dependencie') { apply plugin: 'java' sourceSets { generated { java { srcDir 'src/generated/java' } } main { compileClasspath +=

我有一个应用了java插件的项目,还有一个附加的源代码集

project(':dependencie') {
    apply plugin: 'java'
    sourceSets {
        generated {
            java {
                srcDir 'src/generated/java'
            }
        }
        main {
            compileClasspath += generated.output
            runtimeClasspath += generated.output
        }
        test {
            compileClasspath += generated.output
            runtimeClasspath += generated.output
        }
    }
}
另一个取决于这个:

project(':dependsFrom') {

    apply plugin: 'java'
    dependencies {
        compile(
                project(':dependencie')
        ) { transitive = false }
    }
}
我的问题是,当我试图从中编译DependensFrom时,它找不到为项目
dependencie
生成的
源集的类。我的解决方法是添加行

output.dir(generated.output, builtBy: 'regenerateFromWsdl')

对于
dependencie
main
源集
,但是任何关于如何“注册”生成的
源集的输出以用于将来的依赖项的见解都将非常有用。

我您希望将生成的代码建模为一个单独的源集,您必须创建一个Jar并通过
运行时
配置发布它:

task generatedJar(type: Jar) {
    from sourceSets.generated.output
}

artifacts {
    runtime generatedJar
} 

或者,您可以添加
src/generated/java
作为
main
源代码集的另一个源目录,在这种情况下,它将被编译/打包/导出。

事实上,我找到了一个解决方案。您只需要将生成的sourceSet输出添加到dependencie项目的jar任务中,因为正是这个jar任务将项目“注入”到dependencie系统中

我的问题是,我认为项目的任何附加源集都会被项目的所有任务自动使用

这里是修改后的gradle脚本

project(':dependencie') {
    apply plugin: 'java'
    sourceSets {
        generated {
            java {
                srcDir 'src/generated/java'
            }
        }
        main {
            compileClasspath += generated.output
            runtimeClasspath += generated.output
        }
        test {
            compileClasspath += generated.output
            runtimeClasspath += generated.output
        }
    }
    jar {
        from sourceSets.generated.output
    }
}

我想每个项目保留一个jar,所以您的第一个解决方案不起作用。另外,您的第二个解决方案只是我的解决方案的一个变体(将生成的源集集成到主源集0中)。它不是一个解决方案,而是一个常见的解决方案(没有额外的源集)。将多个源代码集输出放在同一个Jar中的缺点是,这意味着编译/测试和包的粒度不同,这是我通常会尽量避免的。