我目前正要将我的项目的构建系统从ANT迁移到gradle。所以我很擅长gradle我的项目功能是一个动态加载在XML文件中配置的jar的插件机制。每个插件都在自己的子项目中。 XML配置的条目如下所示
<?xml version="1.0" encoding="UTF-8"?>
<implementation ...>
<repository>text</repository>
<classpath>library1.jar</classpath>
<classpath>library2.jar</classpath>
...
</implementation>
我添加了一个XSL转换,为每个条目添加前缀,并在构建文件夹中使用正确的lib文件夹,以使其可用于我的主项目的运行任务。
对于在我的项目中创建的库,这已经可以正常工作了。但是,其中一些依赖于第三方库,例如protobuf。
现在,我通过将所有引用的jar复制到lib文件夹来解决这个问题。我的build.gradle看起来如下
dependencies {
compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.1.0'
...
compile project(':main')
}
task copyReferencedLibraries(type: Copy) {
into "$buildDir/libs"
from configurations.compile
}
jar {
dependsOn xslt
dependsOn copyReferencedLibraries
...
}
但是,这会将所有库(包括从主项目继承的库)复制到lib文件夹。比实际需要更多。
如何将库过滤到本子项目中定义的库,或者至少手动过滤我想要复制的库?
答案 0 :(得分:0)
您只需过滤Copy
任务
task copyReferencedLibraries(type: Copy) {
into "$buildDir/libs"
from(configurations.compile) {
exclude 'some.jar', 'some-other.jar'
include 'some-required.jar', 'some-other-required.jar'
}
}
参考:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html
请注意,不要排除第二层或第三层依赖关系(即您使用的jar所需的jar)。如果你这样做,那么你就不会遇到编译错误,当执行触及缺失依赖的代码时,你会遇到运行时错误。