Sas*_*ian 14 package multi-project gradle
我正在努力制作一个多项目构建的东西.根项目看起来像这样:
apply plugin: 'distribution'
version 1.0
distributions {
main {
baseName = 'someName'
contents {
from 'nodes'
into 'nodes'
}
}
}
Run Code Online (Sandbox Code Playgroud)
它只是将带有一些文件的文件夹复制到dist.
我现在希望每个子项目将其内容注入dist.我想添加每个子项目jar,任何dependecies,可能还有一些其他文件等...
我不知道如何从子项目注入根.我应该做那样的事吗?我的意思是这样的:
subprojects {
apply java...
...
// pseudocode
jack into the root project dist plugin
put my produced jars and dependencies in a folder with my name
...
}
Run Code Online (Sandbox Code Playgroud)
有没有人有任何例子,或者只是指出我正确的方向?
谢谢!
pvd*_*sel 13
我在寻找同样的事情.通过对API文档和Gradle自己的构建文件的一些窥视,我得出以下结论:
apply plugin: 'distribution'
distributions {
main {
contents {
into('bin') {
from { project(':subproject1').startScripts.outputs.files }
from { project(':subproject2').startScripts.outputs.files }
fileMode = 0755
}
into('lib') {
def libs = []
libs << project(':subproject1').configurations.runtime - project(':runner').configurations.runtime
libs << project(':subproject2').configurations.runtime
from libs
from project(':subproject1').jar
from project(':subproject2').jar
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该内容{}封闭是CopySpec,明知使得使用分配插件方式简单:)
查看Gradle自己的子项目/发行版/发行版.gradle文件,了解使用CopySpec的一些很好的例子.
这有效.
可悲的是,目前我还不知道如何以一种干净的方式将其扩展到两个以上的项目.至少我们离我们更近一步了:)
我找到了一个适合我的解决方案.关键是你要添加一个单独的子项目来创建dist.该子项目是其他子项目的兄弟.也就是说,不要尝试在顶级build.gradle文件中编写分发脚本.
我们打电话给新的子项目dist.首先要做的是将它添加到settings.gradle多项目根目录中的顶级文件中:
include "subproject1", "subproject2", "subproject3", ....... , "dist"
Run Code Online (Sandbox Code Playgroud)
您的dist项目必须至少包括:
build.gradle - 详情如下 src/main/dist/at_least_one_dummy_file.txt- 分发插件总是需要一个src/main/$distribution.name目录.具有非空单用 distribution.name的main招数插件跟进所有的所有的传递依赖main的所有兄弟项目的sourcesets.接下来,项目的build.gradle文件dist:
/* Hook in all sibling project jars and their transitive dependencies */
apply plugin: 'java'
dependencies {
compile project(':subproject1')
compile project(':subproject2')
compile project(':subproject3')
. . .
}
/* Distribution */
apply plugin: 'java-library-distribution'
distributions {
main {
baseName = "your-top-level-project-name"
contents {
exclude "dist-${version}.jar"
. . .
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后跑gradle distZip.该ZIP文件dist/build/distributions将包含您想要的lib每个子目录JAR:兄弟项目JAR及其传递依赖项.
由于我们使用的技巧,分发插件将使一个空的JAR调用dist-${version}.jar.出于美观原因,我通过exclude上面的调用将其删除,但它是无害的.您还可以使用第二个exclude调用来删除at_least_one_dummy_file.txt如果src/main/dist您想要包含的内容确实没有内容.如果您不想添加任何工件和/或删除此处提到的工件,那么您根本不需要任何contents部分.
我还找到了根据这是一个"dev"或"prod"发行版,la Maven配置文件选择性地包含不同工件的方法.如果您希望我添加,请在评论中发帖,我会.
| 归档时间: |
|
| 查看次数: |
7659 次 |
| 最近记录: |