我从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></>
部分。它什么也改变不了。
1条答案
按热度按时间toiithl61#
由
spring boot
生成的JAR文件,它是可执行的FAT JAR。它包含
spring boot
加载器、所有应用程序依赖项、应用程序配置,当然还有应用程序类,但位于仅对spring boot
加载器可见的特殊目录中。原始JAR作为副本保存在
target/project-version.jar.original
中,您可以比较以下各项的输出:因此,您不能简单地将
spring boot
应用程序用作依赖项。为了在两个
spring boot
应用程序之间共享一些代码,您应该创建另一个共享人员项目--标准JAR--而不是Spring Boot应用程序,并将其用作两个应用程序中的依赖项。