我有项目A
和B
都有common
项目作为build.gradle文件中定义的编译依赖项,如下所示:
dependencies {
compile project(":common")
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-cache')
compile("net.oauth.core:oauth:20090617")
compile("net.oauth.core:oauth-httpclient4:20090617")
compile('org.apache.httpcomponents:httpclient')
compile("com.atlassian.jira:jira-rest-java-client:2.0.0-m2")
compile("com.google.guava:guava:18.0")
compile('org.flywaydb:flyway-core')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
这个常见的项目有application.yml文件,包含各种常见信息,如数据库连接属性,休眠设置等。所以我不想在A
和其他项目中复制这些文件。 B
。
在项目A
中,主弹簧启动文件如下所示:
@SpringBootApplication(scanBasePackageClasses = {CommonApp.class,
A.class})
public class A {
public static void main(String[] args) {
SpringApplication.run(A.class, args);
}
}
其中CommonApp
是commmon
项目中的主要类。此common
主文件如下:
@SpringBootApplication
public class CommonApp {
public static void main(String[] args) {
SpringApplication.run(CommonApp.class, args);
}
}
项目A
和B
编译得很好,但是yml
项目的类路径中的所有common
文件都不会从A
中看到B
,所以我别无选择,只能在A
和B
更好的方法是什么? Spring引导常见项目可以与其他项目共享资源吗?
请注意,理想情况下,解决方案不应该依赖于gradle,因为我希望从Intellij IDEA运行单元和集成测试,而不使用gradle运行测试。
我的应用结构是
app
|-A
|-build.gradle
|-web
|-B
|-build.gradle
|-common
|-src/main/resources
|-application.yml
|-database.yml
|-web.yml
|-settings.gradle
|-build.gradle
A,B和common都是春季启动应用程序(常见的是启动应用程序,但它只用作A,B的依赖项)。
答案 0 :(得分:0)
如果你想要一个非gradle解决方案,你总是可以添加一个DAO-esque文件来访问公共项目中所需的值,然后jar你的公共项目并将它作为依赖项添加到项目A和B中。
编辑:我道歉,我没解释得很好。当我说“DAO-esque文件”时,我的意思是说是访问属性文件的getter文件(如果需要,还有setter)。例如,有一个单例的getter文件。在创建时,创建对属性文件的静态引用。当项目A(或B)需要属性时,它可以调用此文件来获取属性。至于gradle解决方案,看起来你的上面与你的
非常接近compile project(":common")
代码。你有一个具有
行的settings.gradle文件includeFlat "common"
和项目A和B在同一目录中对公共项目的引用?例如
项目A
(...项目A的文件......)
项目B
(...项目B的文件......)
普通 (...公共文件......)