如何在另一个项目中添加一个基于spring的项目作为Maven依赖项



我从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应用程序除了扫描自己的bean之外,还应该扫描项目A的所有bean。ProjectA在/resources文件夹中也有一些文件需要保持可用。(理想情况下,这些将最终出现在最终可执行jar的根目录中(。

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

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

我做错了什么对不起,Maven对我来说还很模糊。

我试过:

  • 将项目A设置为父项目-没有任何更改
  • 使缓存无效
  • Maven更新
  • 正在检查.m2文件夹-项目A是否正确存在
  • 删除PA中pom.xml的<build></>部分。这不会改变任何内容

spring boot生成的Jar文件是可执行的胖Jar。

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

原始罐子作为副本保存在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应用程序,并将其用作两个应用程序中的依赖项。

最新更新