【发布时间】:2021-11-29 15:57:30
【问题描述】:
我正在使用Jib 将一些 Gradle Jar 任务的输出容器化。这适用于默认 Jar 任务。我的问题是我们有一个自定义 Jar 任务挂接到我们的构建过程中,例如
tasks.register('myOtherJarTask',jar){
//do stuff, triggered by assemble task
// outputted to non default directory
}
并且我希望将其输出容器化而不是默认 Jar,默认 Jar 由于其他原因对我们仍然有效。有没有办法在 JIB 中实现这一点,从查看 JIB 插件的源代码来看,它似乎编码为期望 output of the Jar task。来自 Jib 插件的代码:
Jar jarTask = (Jar) project.getTasks().findByName("jar");
Path jarPath = jarTask.getArchiveFile().get().getAsFile().toPath();
log(LogEvent.debug("Using JAR: " + jarPath));
javaContainerBuilder.addToClasspath(jarPath);
我还尝试使用 extraDirectories 属性将 jar 从“myOtherJarTask”复制到容器中,并通过入口点执行该方式,但默认 Jar 不包含主类,因此会阻止此操作(myOtherJarTask 有一个主类)。重组项目以使默认 Jar 产生我想要的输出不是一种选择。
也许还有另一种我不清楚的方法。
任何帮助表示赞赏。
【问题讨论】:
-
使用属性(变量)改变默认Jar任务的行为怎么样?如果没有通过
-P指定属性,则执行正常的Jar 任务。如果指定了属性,则在 Jar 任务中执行“myOtherJarTask”。