【问题标题】:Spring Boot Maven Plugin not creating executable jarSpring Boot Maven 插件未创建可执行 jar
【发布时间】:2014-10-11 11:56:06
【问题描述】:

我的 POM 如下。但是当我运行“mvn clean package”时,没有创建可执行的 JAR。但是,当我删除dependencyManagement 元素并将spring boot 添加为父POM 时,一切正常。

我错过了什么?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>sample-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

【问题讨论】:

    标签: spring maven-3 spring-boot


    【解决方案1】:

    需要自己配置spring-boot-maven-plugin:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.1.8.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    显然设置您自己的插件版本。现在,如果您运行 mvn install 或 mvn package,您将生成可执行的 JAR。

    【讨论】:

      【解决方案2】:

      那是因为插件是在第二种情况下在父级中配置的。如果要管理自己的插件(即不使用父插件),则必须显式配置spring boot插件(和其他插件)。

      【讨论】:

        【解决方案3】:

        当您使用 Spring boot 依赖管理(没有 spring-boot-starter-parent)时,您仍然可以保留依赖管理的好处,但 不是插件管理

        这意味着您需要提供完整的插件(带有版本和其他东西)。

        【讨论】:

        • 您是否有可以确认这一点的文档链接?
        • Yes
        • 这解决了我的错误。我在&lt;pluginManagement&gt; 中有spring-boot-maven-plugin,同时在&lt;dependencyManagement&gt; 中也有一些依赖项。即使在插件上指定了&lt;goal&gt;repackage&lt;/goal&gt;,我仍然没有得到一个可执行的jar。将spring-boot-maven-plugin 移回&lt;plugins&gt; 允许我再次获得可执行的jar
        【解决方案4】:

        Spring Boot 将确保您的应用程序在您运行 mvn package 时作为测试启动。确保在此期间它没有失败。

        【讨论】:

          【解决方案5】:

          给定的是pom.xml来创建一个可执行的jar文件

          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>org.executablejar</groupId>
          <artifactId>demo</artifactId>
          <packaging>jar</packaging>
          <version>0.0.1-SNAPSHOT</version>
          <name>demo Maven Webapp</name>
          <url>http://maven.apache.org</url>
          
          <properties>
              <java-version>1.8</java-version>
              <docker.image.prefix>springDemo</docker.image.prefix>
          </properties>
          
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.3.3.RELEASE</version>
          </parent>
          
          <dependencies>
          
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
          
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
              </dependency>
          
              <dependency>
                  <groupId>org.apache.tomcat.embed</groupId>
                  <artifactId>tomcat-embed-jasper</artifactId>
              </dependency>
          
          </dependencies>
          
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
              <finalName>demo</finalName>
          </build>
          

          要创建可执行 jar,请键入以下命令

          $ mvn clean
          $ mvn install
          

          观看视频: https://youtu.be/Yy8RxjdcTfE

          【讨论】:

            【解决方案6】:

            根据 SpringBoot 文档。 该插件会重写您的清单,特别是它管理 Main-Class 和 Start-Class 条目,因此如果默认值不起作用,您必须在那里配置它们(而不是在 jar 插件中)。 manifest中的Main-Class其实是由boot插件的layout属性控制的

            SpringBoot Maven-plugin-not-creating-executable-jar

            以下根据 SpringBoot 文档所做的更改对我有用。

                <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <mainClass>YourSpringBootJavaClass</mainClass>
                            <layout>WAR</layout>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>repackage</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
                <finalName>yourwarfileName</finalName>
            </build>
            

            【讨论】:

              【解决方案7】:

              一年多来,我一直在为一个项目构建一个可运行的 JAR (Maven POM),最近发生了一些变化,该 JAR 不再包含任何依赖项 JAR。最终,更新到最新的 Spring Boot 版本(在撰写本文时对我来说是 1.5.2.RELEASE)解决了这个问题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-11-21
                • 2019-05-04
                • 2012-06-13
                • 1970-01-01
                • 2016-02-09
                • 2017-08-20
                • 1970-01-01
                • 2018-08-27
                相关资源
                最近更新 更多