2014-12-05 104 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