当前位置: 首页 > 知识库问答 >
问题:

spring boot-已有父pom时的父pom

潘刚洁
2023-03-14

是否有一个具体的推荐方法将spring启动的父pom包含到已经有一个必需的父pom的项目中?

对于需要从组织父级扩展的项目,您有什么建议(这是非常常见的,甚至是许多/大多数项目发布到Maven central,这取决于它们来自的feeder Repo)。大部分构建内容都与创建可执行JAR相关(例如,运行嵌入式Tomcat/Jetty)。有一些html" target="_blank">方法可以对事物进行结构化,这样您就可以获得所有的依赖关系,而不需要从父级扩展(类似于组合与继承)。但是你不能用这种方法来构建。

那么,在所需的父pom中包含所有的spring引导父pom还是在项目pom文件中仅具有pom依赖项更好。

其他选择?

提亚,

斯科特

共有2个答案

吕作人
2023-03-14

使用1.5.9更新2018-01-04。

我在这里有完整的代码和可运行的示例https://www.surasint.com/spring-boot-with-no-parent-example/

你需要这个作为一个基本的

   <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springframework.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

但这还不够,您还需要为spring-boot-maven-plugin显式定义目标(如果您使用spring boot作为父级,则不必显式定义此目标)

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${springframework.boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

否则,您无法构建为可执行的jar或WAR。

还没有,如果您使用的是JSP,则需要具备以下内容:

<properties>    
  <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

否则,您将得到以下错误消息:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring-boot-09: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executi
ng in update mode) -> [Help 1]

不,不,如果您使用Maven配置文件和资源筛选器,spring boot带有“@”,而不是“${}”(如本例https://www.surasint.com/spring-boot-maven-resource-filter/),那么这仍然是不够的。那么您需要显式地将此添加到

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

这个在里面

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>

请参阅链接https://www.surasint.com/spring-boot-with-no-parent-example/中的示例。

姚麒
2023-03-14

您可以像使用“BOM”一样使用spring-boot-starter-parent(C.F.spring和Jersey现在支持该特性的其他项目),并且只将其包含在带有scope=import的依赖项管理部分中。这样,您就可以获得使用它的很多好处(即依赖项管理),而不需要替换实际的父项中的设置。

它做的另外两件主要事情是

  1. 定义属性加载以快速设置要重写的依赖项版本
  2. 用默认配置配置一些插件(主要是spring boot maven插件)。因此,如果使用自己的父级,则必须手动执行这些操作。

spring boot文件中提供的例子:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
 类似资料:
  • 下面是我的pom.xml文件:

  • 我读了很多关于如何在spring boot项目中使用spring-boot-starter-parent的帖子。基本上,我读过一些帖子(Spring文档也讨论了这一点),这些帖子描述了两种实现这一点的方法 直接使用spring-boot-starter-parent作为项目父级。它给我们带来了依赖管理和插件管理的好处。 另一种方法是在项目pom中导入spring-boot-starter父级(如果

  • 我们的结构如下: 在我们的通用api中,我们定义了protobuf消息,还定义了帮助器类和类型,并希望其他人使用它们。 当我们向客户提供common-api.jar时,他们还需要两个父pom(pom2和pom1),以便在他们自己的maven服务器上重新部署它们。 一种向他们提供POM的方法,我们可以公开我们的maven存储库,至少是所需的部分,但不幸的是,目前这不是一个选项。 有没有办法自动创建公

  • 我在stackoverflow上读了几个“不可解析的父POM:”问题,但没有任何帮助。 我的目录结构如下: 我得到以下错误:

  • 当我使用mvn install构建工件时,我看到JAR在我的.m2文件夹中构建,但是Project.version没有替换为实际版本,即1.0-Snapshot。 > 每个工件的.m2存储库中的父pom和/或子pom是否具有指定的版本,或者是否为Project.version 我是否应该在父POM中指定Project.Version作为属性。maven文档说明Project.version可由De

  • 使用可以用于基于的遗留用例,但也可以测试我们正在迁移的未来用例:。 我是否可以在每次修改POM时实现以下反应器构建?或者,类似的东西?或者,Maven仅仅是这个用例的错误工具吗? 理想情况下,我希望在一个反应器构建中实现所有功能,每个编译并与每个继承的依赖项一起使用。我知道这会使我的Maven repo处于不希望的状态,但至少我可以将反应器构建插入到我的CI,并确保我的构建在依赖平台上运行。 注意