2014-12-05 99 views
8

我創建了一個裸骨Maven項目,除pom.xml之外完全空。Spring引導和maven exec插件問題

有了這個POM(注意:parent元素被註釋掉):

<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>springboot-test</groupId> 
    <artifactId>springboot-test</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

<!-- <parent> --> 
<!--  <groupId>org.springframework.boot</groupId> --> 
<!--  <artifactId>spring-boot-starter-parent</artifactId> --> 
<!--  <version>1.1.9.RELEASE</version> --> 
<!-- </parent> --> 

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.2</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

</project> 

採樣運行:

$ mvn exec:java -Dexec.mainClass=test 
[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building springboot-test 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ springboot-test --- 
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6. 
[WARNING] 
java.lang.ClassNotFoundException: test 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:281) 
     at java.lang.Thread.run(Thread.java:745) 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.480 s 
[INFO] Finished at: 2014-12-05T13:45:34-05:00 
[INFO] Final Memory: 8M/176M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:java (default-cli) on project springboot-test: An exception occured while executing the Java class. test -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[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/MojoExecutionException 

這是預期(沒有CLAS test在這個項目中)。

使用這種聚甲醛(即只是取消註釋parent):

<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>springboot-test</groupId> 
    <artifactId>springboot-test</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

    <parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.9.RELEASE</version> 
    </parent> 

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.2</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

</project> 

採樣運行:

$ mvn exec:java -Dexec.mainClass=test 
[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building springboot-test 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) > validate @ springboot-test >>> 
[INFO] 
[INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) < validate @ springboot-test <<< 
[INFO] 
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ springboot-test --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.550 s 
[INFO] Finished at: 2014-12-05T13:45:27-05:00 
[INFO] Final Memory: 12M/178M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project springboot-test: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java are missing or invalid -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[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/PluginParameterException 

同樣的事情發生以exec-Maven的插件:1.3.2:

$ mvn org.codehaus.mojo:exec-maven-plugin:1.3.2:java -Dexec.mainClass=test 
[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building springboot-test 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ springboot-test --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.400 s 
[INFO] Finished at: 2014-12-05T13:52:46-05:00 
[INFO] Final Memory: 6M/157M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:java (default-cli) on project springboot-test: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.3.2:java are missing or invalid -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[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/PluginParameterException 

附加信息:

$ java -version 
java version "1.8.0_11" 
Java(TM) SE Runtime Environment (build 1.8.0_11-b12) 
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode) 
$ mvn -v 
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T09:51:42-04:00) 
Maven home: C:\dev\bin\apache-maven-3.2.2 
Java version: 1.8.0_11, vendor: Oracle Corporation 
Java home: C:\progra~1\java\jdk1.8.0_11\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos" 

問題:

  • 爲什麼這一故障/如何解決?
  • 爲什麼在添加parent時失敗? exec-maven-plugin如何受此影響?

(作爲一個方面說明,我喜歡Windows 7的屬於faimly的事實: 「DOS」,我在等家人: 「CP/M」 爲Windows 8.1中實現)

回答

17

因爲Spring-Boot正在爲您的項目添加一些額外的Maven配置。 如果您使用的是eclipse,那麼有一個標籤叫做'Effective POM'。

通過此選項卡,你可以看到它增加了下面這段代碼:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2.1</version> 
     <configuration> 
     <mainClass>${start-class}</mainClass> 
     </configuration> 
    </plugin> 

所以,當你與春天啓動父運行它,它看起來爲${start-class}值,它解析爲空,除非你定義它,那是當你看到有關mainClass參數沒有值的錯誤。

添加到您的項目:

<properties> 
    <start-class>com.Test</start-class> 
</properties> 

然後運行它:clean compile exec:java

 
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ springboot-test --- 
**********test************** 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2.388 s 
[INFO] Finished at: 2014-12-05T15:25:05-06:00 
[INFO] Final Memory: 17M/231M 
[INFO] ------------------------------------------------------------------------ 

您也可以在命令行上start-class物業提供的價值,這個工程即使你沒在您的pom文件中沒有定義:

mvn exec:java -Dstart-class=com.Test

+0

非常好,謝謝邁克!這個覆蓋絕對應該在[Spring Boot documentation]的首頁的某個地方(http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/)... – 2014-12-08 15:41:01