我通过在jar中添加以下代码来解决这个问题:
jar {
from sourceSets.main.output
from project(':core:common').sourceSets.main.output
from project(':core:installer').sourceSets.main.output
def libraries =['httpclient-4.5.5.jar','json-20131018.jar']
from configurations.runtimeClasspath.
findAll { libraries.contains(it.name)}.
collect { zipTree(it) }
}
但我认为Gradle还是应该提供一个更好的解决方案,在jar文件中包含或排除外部库。
我更新了上面的解决方案,我认为这是一个更好的方法,因为我们不需要指定jar文件。我们可以定义如下配置:
configurations {
runtimeLibraries
}
dependencies {
compile project(':core:common')
compile project(':core:installer')
runtimeLibraries 'org.apache.httpcomponents:httpclient:4.5.5', 'org.json:json:20131018'
}
然后我们可以如下更新Jar任务:
jar {
from sourceSets.main.output
from project(':core:common').sourceSets.main.output
from project(':core:installer').sourceSets.main.output
from configurations.runtimeLibraries.collect { zipTree(it) }
}
这两种方法的一个不同之处是,通过定义配置,gradle将识别所需的依赖关系,并将它们添加到jar中。例如,如果您正在使用commons-net:commons-net:1.4.1作为创建的jar文件中runtimeLibraries的一部分,您可以找到由commons net使用的org.apache.oro包