Gradle java库:api,但可编译
根项目:创建一场战争 次级项目fooGradle java库:api,但可编译,java,gradle,dependencies,war,Java,Gradle,Dependencies,War,根项目:创建一场战争 次级项目foo apply plugin: 'java-libarary dependencies { compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1' } apply plugin: 'java-libarary dependencies { compileOnlyApi group: 'javax.servlet', name: 'javax.
apply plugin: 'java-libarary
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compileOnlyApi group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
}
子项目栏
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
有没有办法不在javax.servlet-api上添加两次相同的依赖项?
ProjectFoo的一些可编译依赖项需要添加到ProjectBar中,但它不应该出现在战争中。需要如下配置:
apiCompileOnly
如果您需要类似于
apiCompileOnly
的配置,则不会阻止您创建一个
configurations {
apiCompileOnly
}
或
或者您可以将其从战争中排除:
war {
rootSpec.exclude('**/javax.servlet-api-*.jar')
}
您可以通过根build.gradle
subprojects {
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
}
正如你所说的
ProjectFoo的一些可编译依赖项需要添加到ProjectBar中,但它不应该出现在战争中
那么在这种情况下,子项目
闭包就不再那么方便了。
您可以将所有子项目共有的依赖项添加到其中,并将特定的依赖项添加到特定的项目中,但请记住有关传递的信息,因为如果您不这样禁用,您的项目
依赖项将带来它们的传递信息:
compile (project(':foo')){transitive=false}
或者,您可以搜索您感兴趣的项目,并添加您需要的内容,如根项目build.gradle中的另一个答案中所建议的@ToYonos
apply plugin: 'java-libarary'
subprojects {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
或
任何想让库或模块的使用者使用compileOnly依赖项(无需在使用者模块中重新声明)的人,现在都有compileOnlyApi:
这将允许将库的依赖关系放在使用它的任何模块的编译时类路径上:
次级项目foo
apply plugin: 'java-libarary
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compileOnlyApi group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
}
子项目栏现在在编译时可以访问servlet类,因为它导入了项目foo
apply plugin: 'java-libarary
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compileOnlyApi group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
}
java库和war插件中应支持apiCompileOnly以自动传播依赖项,但从运行时(如war)中排除。@eastwater我不确定你的意思,我找不到有关apiCompileOnly
配置的任何信息。您在哪里找到了有关此的信息?它不存在,但此配置很有用。