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

标签 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 文件,其中包含各种通用信息,例如数据库连接属性、 hibernate 设置等。所以我不想在其他项目(例如 A)中复制这些文件。和B

在项目中A主要的 Spring Boot 文件如下所示:

@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 ,所以我别无选择,只能在 A 中手动复制它们。和B

更好的方法是什么? spring boot常用项目可以和其他项目共享资源吗?

请注意,理想的解决方案不应依赖于 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 都是 spring boot 应用(common 也是一个 boot 应用,但它仅用作 A、B 的依赖)。

最佳答案

如果您想要一个非 gradle 解决方案,您始终可以添加一个 DAO 式文件来访问公共(public)项目中所需的值,然后将您的公共(public)项目打包并将其添加为项目 A 和 B 的依赖项。

编辑:抱歉,我没有解释清楚。当我说“DAO 式文件”时,我的意思是指访问属性文件的 getter(以及 setter,如果需要)的文件。例如,有一个单例的 getter 文件。创建时,创建对属性文件的静态引用。当项目A(或B)需要某个属性时,可以调用该文件来获取该属性。

至于 gradle 解决方案,看起来你的上面与你的相当接近

compile project(":common")

代码。您是否有包含以下行的 settings.gradle 文件

includeFlat "common"

以及对与项目 A 和 B 位于同一目录中的公共(public)项目的引用?例如

项目A

(...项目 A 的文件...)

项目B

(...项目 B 的文件...)

常见 (...Common 的文件...)

关于java - spring boot中的共享gradle项目不包含yml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584671/

相关文章:

java - 查询时仅显示第一行

spring - 如果redis不在线,如何配置RedisHttpSessionConfigure回退

android - 构建.gradle : how to execute code only on selected flavor

java - Java布局中的元素都在同一位置

java - 根据条件进行 Guice 注入(inject)

java - 将模拟 bean 注入(inject) AnnotatinConfigApplicationContext 失败

java - EJB、hibernate、spring和JSF有什么区别?

java - Quarkus ClassNotFoundException 本地依赖

gradle - 没有任务的Gradle脚本如何工作?

java - OnPost执行结果为空