【发布时间】:2017-03-19 08:25:52
【问题描述】:
我有一个示例应用程序,其中包含 Groovy 中的主类和 Java 中的主类。当 Java 类被指定为主类时,maven-jar-plugin 成功构建了一个可执行 jar,但当 Groovy 类被指定时则不行。让我演示一下。这是我的构建:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.hello.JavaHello</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
<verbose>false</verbose>
<source>${java.compiler.version}</source>
<target>${java.compiler.version}</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>${groovy-eclipse-compiler.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.4.3-01</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
然后编译运行:
$ mvn -q clean package && \
> jar xf target/hello-world-1.0-SNAPSHOT.jar META-INF/MANIFEST.MF && \
> cat META-INF/MANIFEST.MF && rm -r META-INF && \
> java -jar target/hello-world-1.0-SNAPSHOT.jar
Manifest-Version: 1.0
Built-By: tytk
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_66
Main-Class: com.example.hello.JavaHello
Hello from Java!
然后,将mainClass 更改为:
<mainClass>com.example.hello.GroovyHello</mainClass>
并运行相同的命令:
$ mvn -q clean package && \
> jar xf target/hello-world-1.0-SNAPSHOT.jar META-INF/MANIFEST.MF && \
> cat META-INF/MANIFEST.MF && rm -r META-INF && \
> java -jar target/hello-world-1.0-SNAPSHOT.jar
Manifest-Version: 1.0
Built-By: tytk
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_66
Main-Class: com.example.hello.GroovyHello
Error: Could not find or load main class com.example.hello.GroovyHello
每个类只有一个带有 println 语句的 main 方法。
那么我怎样才能用我的 groovy 类获得一个可执行的 jar? maven-shade-plugin 有效,但我不想要一个胖 jar - 我希望排除依赖项。
【问题讨论】:
-
你能告诉我们项目结构吗?
GroovyHello类在哪里(文件夹路径)? -
GroovyHello和JavaHello都位于hello-world/src/main/java/com/example/hello/
标签: java maven groovy jar maven-jar-plugin