spring boot中的共享gradle项目不包含yml文件

时间:2016-02-23 17:51:15

标签: java spring gradle spring-boot

我有项目AB都有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);
    }
}

其中CommonAppcommmon项目中的主要类。此common主文件如下:

    @SpringBootApplication
public class CommonApp {

    public static void main(String[] args) {
        SpringApplication.run(CommonApp.class, args);
    }
}

项目AB编译得很好,但是yml项目的类路径中的所有common文件都不会从A中看到B,所以我别无选择,只能在AB

中手动复制它们

更好的方法是什么? 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的依赖项)。

1 个答案:

答案 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的文件......)

普通   (...公共文件......)