繁体   English   中英

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

[英]How can I add a spring-based project as a Maven dependency in another project?

我从 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 -->

这是一个独立的项目,因为它能够从主 class 作为 Spring 应用程序运行。 这对于测试目的非常有用。

我希望能够将项目 A 用作另一个项目(项目 B)的一部分 - 也就是说 - 另一个 Spring 应用程序应该扫描 ProjectA 的所有 bean 除了它自己的。 ProjectA 在 /resources 文件夹中还有一些文件需要保持可用。 (理想情况下,这些最终会出现在最终可执行 jar 的根目录中)。

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

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

我究竟做错了什么? 对不起,Maven 对我来说仍然很模糊。

我努力了:

  • 将项目 A 设置为父级 - 没有任何变化
  • 使缓存失效
  • Maven 更新
  • Checking.m2 文件夹 - 项目 A 正确存在
  • 删除 PA 中 pom.xml 的<build></>部分。 它没有任何改变。

Jar 文件由spring boot生成,它是可执行文件 jar。

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

原版 jar 作为副本保留在target/project-version.jar.original version 中。jar.original 你可以比较 output 的:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM