maven-exec-plugin выдает исключение без видимой причины - PullRequest
5 голосов
/ 28 сентября 2011

Я набираю следующее в оболочке Windows в корне проекта Maven, который содержит класс с

public static void main (аргументы String [])

метод, который я хотел бы запустить.

mvn exec: java -Dexec.mainClass = "com.spp.config.main.SqlGeneratorHarness" -e

Класс существует и скомпилирован в этот пакет (то есть, target / classes / com / spp / config / main / SqlGeneratorHarness.class).

Понятно ...

+ Error stacktraces are turned on.  
[INFO] Scanning for projects...  
[INFO] Searching repository for plugin with prefix: 'exec'.  
[INFO] ------------------------------------------------------------------------  
[ERROR] BUILD FAILURE  
[INFO] ------------------------------------------------------------------------  
[INFO] Invalid task '.mainClass=com.spp.config.main.SqlGeneratorHarness': you must specify a valid 
       lifecycle phase, or a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal
[INFO] ------------------------------------------------------------------------
[INFO] Trace org.apache.maven.BuildFailureException: Invalid task' .mainClass=com.spp.config.main.SqlGeneratorHarness': you must specify 
       a valid lifecycle phase, or a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor(DefaultLifecycleExecutor.java:1830)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds(DefaultLifecycleExecutor.java:462)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:175)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
       at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
       at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
       at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
       at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
       at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue Sep 27 14:33:52 PDT 2011
[INFO] Final Memory: 3M/122M
[INFO] ------------------------------------------------------------------------

я пробовал варианты как

mvn exec: exec -Dexec.executable = "java" [...]

и

mvn org.codehaus.mojo: exec-maven-plugin: 1.2.1: java [...]

безрезультатно. Что дает?

Я использую Maven 2.2.1, Java JDK 1.6.0_27 в 64-разрядной версии Windows 7 Enterprise.

Фрагмент из моего файла pom.xml для exec-maven-plugin: ...

<plugin> 
   <groupId>org.codehaus.mojo</groupId> 
   <artifactId>exec-maven-plugin</artifactId> 
   <version>${exec-maven-plugin.version}</version> 
</plugin> 

где версия установлена ​​в <properties>

Ответы [ 3 ]

16 голосов
/ 30 сентября 2011

Итак ... еще раз ... если вы используете Windows PowerShell, вы получите исключение, о котором я первоначально сообщал.Однако, если вы используете cmd.exe, вы сможете запустить класс с помощью команды, как я написал (с переносом двойных кавычек или без него).

1 голос
/ 28 сентября 2011

Там что-то очень простое идет не так.Попробуйте потерять кавычки.Они там не нужны.На самом деле, попробуйте начать с чего-то более простого, например

mvn -e exec:java -Dexec.mainClass=foo 

. Это должно привести к ошибке «Возникла исключительная ситуация при выполнении класса Java. Foo», и основной причиной должно быть ClassNotFoundException:

Caused by: java.lang.ClassNotFoundException: foo
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)

Набери это сам.Не копируйте / вставляйте команду из другого места.

0 голосов
/ 28 сентября 2011

Просто быстрый контрольный список:

  1. Переименуйте папку ~/.m2 и снова запустите mvn exec:java ... и позвольте Maven снова загружать все из центра.
  2. Убедитесь, что ваш плагин execскачал с центрального.(Убедитесь, что ваш локальный репозиторий содержит тех же файлов, что и центральный .)
  3. Поиск подозрительных тегов repository и pluginRepository в pom.xml (и родительских poms также).
  4. Поиск подозрительных тегов repository, pluginRepository и mirror в settings.xml.
  5. Проверка проекта на другом компьютере - скопируйте его и попробуйте собрать / запуститьexec: java на другом компьютере.
  6. Загрузите Maven 3.x и попробуйте запустить exec с ним.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...