2014-12-05 2 views
8

Я создал проект Maven без костей, полностью пуст, кроме pom.xml.Spring boot и maven exec plugin issue

С этим П (обратите внимание, что 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> 

Sample пробег:

$ 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 в этом проекте).

Используя этот 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.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 

То же самое происходит и с ехес-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: "ДОС", я жду семьи: "CP/M" будет реализована для ОС Windows 8.1)

ответ

17

Это связано с тем, что Spring-Boot добавляет в ваш проект дополнительную конфигурацию maven. Если вы используете eclipse, есть вкладка «Эффективный 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 свойства в командной строке, это работает, даже если вы Бесполезный 't определить его внутри вашего файла pom:

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

+0

Отлично, спасибо Майку! Это переопределение должно обязательно находиться где-то на главной странице [Spring Boot documentation] (http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/) ... –

Смежные вопросы