我有一个项目结构,在其中有一些基本项目,在其中实现了所有功能,此外,还有一些用于不同用途/部署的项目,如下所示:
现在,有越来越多的类可用于foo-standalone和foo-ui-test,但我不想将这些类部署到客户。因此,将foo-core作为可能的项目存储在其中。剩下的两个选项是:
我想选择选项2,因为我已经有很多项目。选项2剩下的问题是,这两个项目(foo-standalone和foo-ui-test)都具有Spring WebApplicationInitializer ...
现在我在弄弄我的构建系统(使用gradle),并且能够在foo-standalone项目中排除WebApplicationInitializer,并且仅在构建foo-standalone.war文件时显式包括它。
所生成的用于foo-standalone的build.gradle文件似乎是“hackish”的,如果我重命名或移动WebApplicationInitializer类,它将损坏。我想知道,是否还有另一种方式可以实现我想要的目标,或者是否必须创建一个新项目。
更新
我将WebApplicationInitializer类从src / main / java移到src / init / java,并按如下所示更改了foo-standalone的build.gradle:
sourceSets {
init {
java {
compileClasspath += sourceSets.main.runtimeClasspath
}
}
}
war {
classpath sourceSets.init.runtimeClasspath
}
我猜想这是最短的自定义方式,还是有内置的gradle功能可以做到这一点?
最佳答案
Maven仅允许您依赖JAR项目。有一个功能,您可以在其中放置 war 叠加层,其中一个 war 项目会扩展一个 child 并覆盖某些位(请参见https://maven.apache.org/plugins/maven-war-plugin/overlays.html),这似乎是您的foo-standalone和foo-ui-test之间的关系。
因此,使foo-helper成为 war 项目,并使foo-standalone,foo-ui-test和foo-production使用war覆盖扩展它。
如果有非生产位,则foo-core可以保留为jar。如果要创建内部foo-core-internal以依赖foo-core,则将foo-core保留为内部/测试位。
关于java - 如何使用WebApplicationInitializer依赖项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41930773/