如何将一个基于Spring的项目作为Maven依赖项添加到另一个项目中?

7bsow1i6  于 2022-10-05  发布在  Spring
关注(0)|答案(1)|浏览(247)

我从Spring initalizr创建了项目A,pom.xml基本上如下所示:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0-SNAPSHOT</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>my.group.id</groupId>
<artifactId>projectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ProjectA</name>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- [...] many more Spring and non-spring related dependencies -->

</dependencies>

    <!--  org.springframework.boot plugin, repositories and plugin repos here -->

这是一个独立的项目,从某种意义上说,它能够作为一个Spring应用程序从主类运行。这对于测试目的非常有用。

我希望能够将项目A用作另一个项目(项目B)的一部分--也就是说,另一个Spring应用程序应该扫描Projecta的所有Bean,而不是它自己的Bean。Projecta在/Resources文件夹中也有一些需要保持可用的文件。(理想情况下,它们最终将位于最终可执行JAR的根中)。

我尝试在我的本地存储库中安装PRA(IntelliJ在Maven菜单下有一个方便的Inall选项),并将其作为依赖项添加到Project B中,但这既不导入它自己的依赖项(因此项目B中的Spring注解不起作用),也不导入它的类。将依赖项类型指定为pom修复了第一个问题,但没有修复第二个问题。

现在,项目B可以使用项目A的所有依赖项,而不必导入它们。然而,在项目B中既不能看到、也不能扫描、甚至不能导入项目A的任何类别。

**我做错了什么?**对不起,Maven对我来说仍然很晦涩。

我试过了:

  • 将项目A设置为父级-不做任何更改
  • 使缓存失效
  • Maven更新
  • 正在检查.m2文件夹-项目A正确存在
  • 删除PA中pom.xml的<build></>部分。它什么也改变不了。
toiithl6

toiithl61#

spring boot生成的JAR文件,它是可执行的FAT JAR。

它包含spring boot加载器、所有应用程序依赖项、应用程序配置,当然还有应用程序类,但位于仅对spring boot加载器可见的特殊目录中。

原始JAR作为副本保存在target/project-version.jar.original中,您可以比较以下各项的输出:

jar --list --file=target/project-version.jar.original
jar --list --file=target/project-version.jar

因此,您不能简单地将spring boot应用程序用作依赖项。

为了在两个spring boot应用程序之间共享一些代码,您应该创建另一个共享人员项目--标准JAR--而不是Spring Boot应用程序,并将其用作两个应用程序中的依赖项。

相关问题