Java 如何为依赖项注册源集的输出
我有一个应用了java插件的项目,还有一个附加的源代码集Java 如何为依赖项注册源集的输出,java,gradle,Java,Gradle,我有一个应用了java插件的项目,还有一个附加的源代码集 project(':dependencie') { apply plugin: 'java' sourceSets { generated { java { srcDir 'src/generated/java' } } main { compileClasspath +=
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中的缺点是,这意味着编译/测试和包的粒度不同,这是我通常会尽量避免的。