簡體   English   中英

Spring Boot Maven-無法將Web應用程序打包為可執行jar / war

[英]Spring Boot Maven - Unable to package Web app as executable jar/war

我正在嘗試學習如何使用Spring Boot和MVC構建Web應用程序。

我能夠創建一個Spring Boot應用程序,並通過執行SpringBootWebApplication類中的main方法從Eclipse中運行它。 它工作正常,我可以通過點擊http://localhost:8080來啟動我的應用程序。

現在,我想將我的應用程序打包為可執行的WAR或JAR(我不知道哪個是對的!)。 為此,我在pom.xml添加了一個名為spring-boot-maven-plugin的構建插件。

<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.sriram</groupId>
    <artifactId>springboot</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Tomcat Embed -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- JSTL -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!-- To compile JSP files -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <!-- Package as an executable jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

作為記錄,我根據此處的教程創建了這個pom

當我從命令提示符下運行mvn clean package -e ,出現如下錯誤:

[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building springboot Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for org.springframework.boot:spring-boot-maven-plugin:jar:1.5.1.RELEASE is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.890 s
[INFO] Finished at: 2017-08-01T13:03:42+05:30
[INFO] Final Memory: 8M/184M
[INFO] ------------------------------------------------------------------------
[ERROR] Plugin org.springframework.boot:spring-boot-maven-plugin:1.5.1.RELEASE or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.springframework.boot:spring-boot-maven-plugin:jar:1.5.1.RELEASE: 1 problem was encountered while building the effective model for org.springframework.boot:spring-boot-maven-plugin:[unknown-version]
[ERROR] [FATAL] Non-parseable POM C:\Users\Sriram\.m2\repository\org\springframework\boot\spring-boot-parent\1.5.1.RELEASE\spring-boot-parent-1.5.1.RELEASE.pom: in epilog non whitespace content is not allowed but got r (position: END_TAG seen ...</profiles>\n</project>\nr... @946:2)  @ C:\Users\Sriram\.m2\repository\org\springframework\boot\spring-boot-parent\1.5.1.RELEASE\spring-boot-parent-1.5.1.RELEASE.pom, line 946, column 2
[ERROR] -> [Help 1]
org.apache.maven.plugin.PluginResolutionException: Plugin org.springframework.boot:spring-boot-maven-plugin:1.5.1.RELEASE or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.springframework.boot:spring-boot-maven-plugin:jar:1.5.1.RELEASE
        at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:117)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:181)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getMojoDescriptor(DefaultMavenPluginManager.java:286)
        at org.apache.maven.plugin.DefaultBuildPluginManager.getMojoDescriptor(DefaultBuildPluginManager.java:241)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleMappingDelegate.calculateLifecycleMappings(DefaultLifecycleMappingDelegate.java:110)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings(DefaultLifecycleExecutionPlanCalculator.java:266)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions(DefaultLifecycleExecutionPlanCalculator.java:217)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan(DefaultLifecycleExecutionPlanCalculator.java:127)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan(DefaultLifecycleExecutionPlanCalculator.java:145)
        at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan(BuilderCommon.java:96)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:110)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.springframework.boot:spring-boot-maven-plugin:jar:1.5.1.RELEASE
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:339)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:199)
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:296)
        at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:103)
        ... 27 more
Caused by: org.apache.maven.model.building.ModelBuildingException: 1 problem was encountered while building the effective model for org.springframework.boot:spring-boot-maven-plugin:[unknown-version]
[FATAL] Non-parseable POM C:\Users\Sriram\.m2\repository\org\springframework\boot\spring-boot-parent\1.5.1.RELEASE\spring-boot-parent-1.5.1.RELEASE.pom: in epilog non whitespace content is not allowed but got r (position: END_TAG seen ...</profiles>\n</project>\nr... @946:2)  @ C:\Users\Sriram\.m2\repository\org\springframework\boot\spring-boot-parent\1.5.1.RELEASE\spring-boot-parent-1.5.1.RELEASE.pom, line 946, column 2

        at org.apache.maven.model.building.DefaultModelProblemCollector.newModelBuildingException(DefaultModelProblemCollector.java:197)
        at org.apache.maven.model.building.DefaultModelBuilder.readModel(DefaultModelBuilder.java:581)
        at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:1097)
        at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:829)
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:331)
        at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:321)
        ... 30 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

我沒有從源代碼中得到任何編譯錯誤。 考慮到當我從eclipse中運行main方法時,我的應用程序能夠啟動,為什么我的maven打包不起作用? 我可以找出以下幾點:

基於堆棧跟蹤 ,我打開了文件C:\\ Users \\ Sriram.m2 \\ repository \\ org \\ springframework \\ boot \\ spring-boot-parent \\ 1.5.1.RELEASE \\ spring-boot-parent-1.5.1.RELEASE .pom使用Notepad ++,確實有一些錯誤-我的意思是XML似乎格式錯誤,Notepad ++也拋出了解析錯誤。

雖然我可以弄清楚這是問題所在,但是我不確定在Maven pom自動設置XML的情況下如何導致XML損壞。 我想念什么?

謝謝,Sriram

您至少要糾正兩件事。

第一個:您的Maven構建失敗:

[FATAL]不可解析的POM C:\\ Users \\ Sriram.m2 \\ repository \\ org \\ springframework \\ boot \\ spring-boot-parent \\ 1.5.1.RELEASE \\ spring-boot-parent-1.5.1.RELEASE.pom:在Epilog中不允許使用非空白內容,但會得到r(位置:END_TAG見... \\ n \\ nr ... @ 946:2)@ C:\\ Users \\ Sriram.m2 \\ repository \\ org \\ spring \\ workframe \\ boot \\ spring -boot-parent \\ 1.5.1.RELEASE \\ spring-boot-parent-1.5.1.RELEASE.pom,第946行,第2列

原因不是實際的pom,而是似乎已損壞的spring-boot-parent-1.5.1.RELEASE.pom依賴性。
因此,首先刪除C:\\Users\\Sriram.m2\\repository\\org\\springframework\\boot\\spring-boot-parent\\1.5.1.RELEASE\\文件夾,然后重新啟動構建以下載它。

第二個問題:創建可執行的jar或war,您必須使用spring-boot:repackage目標。

插件文檔中

重新打包:創建一個可自動執行的jar或war文件。 它可以替換常規工件,或者可以使用單獨的分類器附加到構建生命周期。

在pom中,您沒有指定repackage目標。
您只指定spring-boot-maven-plugin

<build>
    <plugins>
        <!-- Package as an executable jar/war -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

因此,將其替換為:

<build>
    <plugins>
        <!-- Package as an executable jar/war -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>           
            <executions>
               <execution>
                <goals>
                   <goal>repackage</goal>
                </goals>
              </execution>
           </executions>
        </plugin>
   </plugins>
</build>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM