【发布时间】:2020-02-17 15:15:16
【问题描述】:
我们正在 WAS 8.5 和 Gradle 5.* 中运行我们的 Java EE 应用程序来构建它们。
过去,我们将 .war 应用程序打包在一个 .ear 存档中,然后我们将其部署在我们的服务器上。我们必须将我们的库与我们的应用程序分开,并将它们作为共享库包含,因为根据我们的经验,它会使部署速度变慢,并且在某些情况下会耗尽所有系统内存,从而导致服务器崩溃。
经过一些实验,我们意识到我们不需要将依赖项提取到共享库中,因为我们可以将它们包含在 .ear 存档的lib 文件夹中。
目前,我们通过将 .war 应用程序的依赖项定义为 compileOnly 并在根项目(生成 .ear 存档)中将它们重新定义为 earlib 来完成此操作。我正在寻找一种方法来自动化这个过程。
我使用的脚本如下所示:
project.configurations.named('deploy').getAllDependencies().withType(ProjectDependency.class).forEach({dependency ->
project.configurations.named('earlib').getAllDependencies()
.addAll(dependency.dependentProject.configurations.named('earlib').getAllDependencies())
})
// This loosely resembles the actual code I used. The thought process is right, it just might have a couple syntax errors.
// Obviously, I defined an `earlib` configuration in the subproject
我尝试在配置阶段以及ear 任务的doFirst{} 部分运行此代码。他们都有不同的问题。
前者不起作用,因为在运行此代码时似乎在配置阶段,尚未配置依赖项。
后者不起作用,因为我不能只是在运行时添加依赖项(回想起来,我什至尝试过这听起来很荒谬)。
我的问题是:我可以在构建生命周期中找到一个阶段,在那里我可以找到和修改依赖项吗?是否有其他解决方法可以解决我的问题?
【问题讨论】:
标签: java gradle dependencies ear