使用 Spring boot maven 项目作为依赖项

Using a Spring boot maven project as a dependency

这似乎是一个微不足道的问题,但我花了几个小时试图解决这个问题,所以如果您能提供任何帮助和了解正在发生的事情,我将很高兴。

我在 Eclipse 中有两个 Spring-boot maven 项目。我们称它们为 ProjectAProjectB。我需要在 ProjectB 中使用来自 ProjectA 的 class (POJO)。这意味着 ProjectA 是 ProjectB 的依赖项。

我把这个依赖放在ProjectB的pom.xml:

    <dependency>
        <groupId>cz.my.project</groupId>
        <artifactId>ProjectA</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

在 Eclipse 中,一切似乎都很好,但是当我使用 ProjectB 启动 Tomcat 时,我遇到了各种异常(取决于我为此依赖项设置的范围)。

我尝试从 ProjectA 使用的 class 出现 ClassNotFound 异常,或者出现以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to scan for SQL migrations in location: classpath:db/migration

ProjectA 包含一个带有一些迁移脚本的 Flyway,这些脚本以某种方式在 ProjectB 中执行(即使 ProjectB 不包含任何 Flyway 内容)。

当 运行 maven 编译时,我得到以下异常(它搜索中央仓库而不是本地仓库):

Could not resolve dependencies for project cz.ProjectA.MyPOJO-service:war:0.0.1: Could not find artifact cz.ProjectA:jar:0.0.1 in central (http://repo.maven.apache.org/maven2)

谁能帮我解决这个问题?我尝试了各种方法:手动将 projectA 放在 classpath 上,运行 在 ProjectA 上安装 maven,将这两个项目放在同一个工作集中等等。到目前为止没有任何效果。

如果您以这种方式导入 Spring Boot 项目,您将导入所有 @Configuration classes 并且 Spring Boot 将扫描所有内容你在那里为了自动连接它。

解决此问题的最佳方法是创建一个包含 classes 的单独项目,这两个项目都使用它们并将其导入。

但是,您可以通过多种方式实现此功能。

首先,虽然我不确定 Flyway 是如何配置的,但如果它是在你的 @Configuration classes 之一中完成的,那么你可以用 [=13 注释该配置=].这样,如果一个项目需要将 Flyway 迁移到 运行,那么它可以激活配置文件。否则,Flyway 不会被激活。

其次,如果自动配置不在您的项目中(如在许多 Spring Boot Starter 依赖项中),那么您可以排除任何 @Configuration class 自动连接Flyway 通过将其放入 Spring 启动应用程序 class(好吧......任何 @Configuration 真的):

@EnableAutoConfiguration(exclude = { FlywayConfiguration.class })

... 其中 FlywayConfiguration.class 是执行自动装配的 class,无论是在您的项目中还是在导入的第三方库中。我有时使用它来禁用测试的安全自动配置。

我确定还有更多选择,但我认为这些是您最好的选择。