java - 自定义 gradle 任务“带 jar”
问题描述
我在 gradle 构建脚本中有多个类似的任务。每个任务都会构建一个 jar。任务如下所示:
task fatJarAndServicePackageXXX(type: Jar) {
baseName = 'adapter-XXX'
def mainClass = 'Gateway'
def specialFlags = ['-Xmx1g']
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
def outPackageName = '../build/' + baseName + '-package.tar.gz'
def filesToBeIncluded = [
baseName + '/' + archiveName,
baseName + '/' + baseName + '.service',
baseName + '/Makefile',
baseName + '/Makefile.properties' ]
def serviceLogPath = '/var/log/' + baseName
def commonFlags = [
"-DsleepMicros=" + "10000"
]
doLast {
copy {
from outputs.files.asPath
into '../build/' + baseName
}
copy {
from '../deployment/template.service'
into '../build/' + baseName
expand(
"JAR_NAME": archiveName,
"SPECIAL_FLAGS": specialFlags.join(" "),
"COMMON_FLAGS": commonFlags.join(" "),
"SERVICE_NAME": baseName,
"MAIN_CLASS": mainClass
)
rename('template.service', baseName + '.service')
}
}
}
对于不同的 XXX,我有一大堆这样的任务,所以我决定创建一个自定义任务类来帮助删除重复的代码。该类如下所示:
class FatJarAndServicePackage extends Jar {
String baseName
String mainClass
private String heapSize = '1g'
List<String> specialFlags = []
String serviceLogPath = '/var/log/' + baseName
List<String> commonFlags = [
"-DsleepMicros=" + 10000
]
void setHeapSize(final String size) {
heapSize = size
}
@Override
Task doLast(final Action<? super Task> action) {
from {
project.configurations.compile.collect { it.isDirectory() ? it : project.zipTree(it) }
}
with jar
project.copy {
from outputs.files.asPath
into project.projectDir.toPath().resolve("build").resolve(baseName)
}
project.copy {
from '../deployment/template.service'
into '../build/' + baseName
expand(
"JAR_NAME": archiveName,
"SPECIAL_FLAGS": specialFlags.join(" ") + " -Xmx" + heapSize,
"COMMON_FLAGS": commonFlags.join(" "),
"SERVICE_NAME": baseName,
"MAIN_CLASS": mainClass
)
rename('template.service', baseName + '.service')
}
project.copy {
from '../deployment/Makefile.properties'
into '../build/' + baseName
expand(
"JAR_NAME": archiveName,
"BASE_NAME": baseName
)
}
project.copy {
from '../deployment/Makefile'
into '../build/' + baseName
}
makeTar()
return super.doLast(action)
}
所以它不起作用。问题是我不明白在哪里放置这些行:
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
我应该如何在自定义任务类中实现这两行?感谢任何帮助。
解决方案
推荐阅读
- powershell - 如何在远程机器上使用配置文件安装 Sysmon
- r - 如何使用 RSelenium 修复“元素不可点击”
- flutter - Flutter 文本表单域
- flutter - Flutter避免在单击内部按钮时关注TextField
- python - 检查一个值是否在列表列表中总是返回 False
- spring-boot - Springfox/Swagger 忽略嵌套对象的 @XmlElement 注释
- c++ - 递增参数包中的每个值
- reactjs - 通过重新渲染模式/组件来交换登录/注册表单?
- r - 将 for 循环的结果值放入 r 中的表中
- python-3.x - Python(AI约束满足问题)将正方形和/或矩形(2d)瓷砖安装到矩形地面上