我有一个项目结构,我有一些基本项目,其中实现了所有功能,并且在一些项目之上,用于不同类型的使用/部署,如下所示:
现在我有越来越多的类对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功能可以做到这一点?
答案 0 :(得分:0)
Maven只允许您对JAR项目具有依赖性。有一个功能,你可以有战争叠加,其中一个战争项目扩展一个孩子并覆盖某些位(见https://maven.apache.org/plugins/maven-war-plugin/overlays.html)这似乎是你的foo-standalone和foo-ui-test之间的关系。
所以让foo-helper成为一个战争项目并使foo-standalone,foo-ui-test和foo-production使用war叠加来扩展它。
foo-core可以保持为jar,如果有非生产位,则创建一个foo-core-internal来依赖foo-core和ring fences内部/测试位。