Отображение ошибок при запуске groovy скрипта в maven против запуска в IDE
Это проект Maven. Для сборки и запуска Groovy скрипта используется плагин "gmavenplus". Когда я запускаю скрипт в maven, даже когда я применяю опцию -X, ошибка выглядит так:
mvn -X clean install gplus:execute
[ОШИБКА] Не удалось выполнить цель org.codehaus.gmavenplus:gmavenplus-plugin:1.5: выполнить (default-cli) в проекте users_rest_updater: Произошла ошибка при вызове метода класса Groovy из classpath. InvocationTargetException: Нет такого свойства: аргументы для класса: Script1 -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Не удалось выполнить цель org.codehaus.gmavenplus:gmavenplus-plugin:1.5:execute (default-cli) on project users_rest_updater: Произошла ошибка при вызове метода класса Groovy из classpath. в org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) в org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) в org.apache.maven.lifecycle.internal..java:80) в org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) в org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) в org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) в org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) в org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) в org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) в org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) в org.ap ache.maven.cli. вызвать (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:498) в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:28haus) в org.code.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) в org.codehaus.plexus.classworlds.laherher.main(Launcher.java:356) Причина: org.apache.maven.plugin.MojoExecutionException: Произошла ошибка при вызове метода класса Groovy из classpath. в org.codehaus.gmavenplus.mojo.ExecuteMojo.doExecute(ExecuteMojo.java:128) в org.codehaus.gmavenplus.mojo.ExecuteMojo.execute(ExecuteMojo.java:83) в org.apache.maven.plugin.DexginManager (DefaultBuildPluginManager.java:134) в org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... еще 20 причин: java.lang.reflect.InvocationTargetException at sun.reflect.NativeImphoA.invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43g.ref.java.j.ref.j.j.ref. 498) в org.codehaus.gmavenplus.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:118) в org.codehaus.gmavenplus.mojo.ExecuteMojo.executeScripts(ExecuteMojo.java:195) в org.codehausmojojo.Exp..doExecute(ExecuteMojo.java:124) ... еще 23 Причина: groovy.lang.MissingPropertyException: Нет такого pr operty: аргументы для класса: Script1 в org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) в org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty: oriteg.jpg codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307) в Script1.run(Script1.groovy:4) в groovy.lang.GroovyShell.evaluate(GroovyShell.jlanov5):.evaluate(GroovyShell.java:623) на groovy.lang.GroovyShell.evaluate(GroovyShell.java:594)
Я запускаю тот же скрипт из IDE (Intellij IDEA), но в консоли он пишет точную ошибку, в моем случае это:
Caught: java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException at MainApp.run(MainApp.groovy:3) Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException ... 1 more
текущий файл pom:
<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>...</groupId>
<artifactId>...</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.6</version>
<!--<scope>runtime</scope>-->
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.16.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.16.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>3.0.16.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.0.16.Final</version>
</dependency>
</dependencies>
<build>
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addTestSources</goal>
<goal>compile</goal>
<goal>testGenerateStubs</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scripts>
<script>file:///${project.basedir}/src/main/groovy/MainApp.groovy</script>
</scripts>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.6</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>MainApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Как я могу заставить Maven показывать точную ошибку? Без этого я не могу найти способ найти то, что идет не так. Для Java-кода Maven всегда работает нормально. Вы всегда можете увидеть основную причину проблемы. Вероятно, это проблема gmavenplus
Плагин Maven, я не уверен.
1 ответ
Если вы просто запустите сценарий как скрипт Groovy в IntelliJ, он не будет знать ни о каких зависимостях вашего проекта. GMavenPlus включает ваши зависимости Maven в путь к классам, который он использует для выполнения ваших скриптов. Для запуска в качестве отдельного скрипта вам нужно добавить зависимости, необходимые для Grape. Обратите внимание, что использование Grape внутри скриптов, выполняемых GMavenPlus, также работает.
Если вы пытаетесь прочитать аргументы, переданные из командной строки, аргументы будут использованы Maven, у GMavenPlus не будет возможности их прочитать. Если вам нужно, чтобы скрипт вызывался как автономно, так и через Maven, вы должны установить свойства для использования Maven и проверить в вашем скрипте, установлены ли они, перед анализом аргументов.
Если args
доставляет вам неприятности, вы можете попробовать this.args
они эквивалентны.