maven配置生成可执行的jar:maven-shade-plugin

来源:互联网 发布:系统服务 软件更新 编辑:程序博客网 时间:2024/05/16 15:05
默认打包生成的jar是不能直接运行的,因为带有main方法的信息不会添加到mainifest中,需要借助maven-shade-plugin。

<project><build><plugins>下面添加配置后的pom文件如下

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"            xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"            xis:schemaLocation = "http://maven.apache.org/POM/4.0.0            http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.juvenxu.mvnbook</groupId>    <artifactId>hello-world</artifactId>    <version>1.0-SNAPSHOT</version>    <name>Maven Hello World Project</name>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.7</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-shade-plugin</artifactId>                <version>1.2.1</version>                <executions>                    <execution>                        <phase>package</phase>                        <goals>                            <goal>shade</goal>                        </goals>                        <configuration>                            <transformers>                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">                                    <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>                                </transformer>                            </transformers>                        </configuration>                    </execution>                </executions>            </plugin>        </plugins>    </build></project>
我们配置了mainClass为com.juvenxu.mvnbook.helloworld.HelloWorld,项目打包时会将该信息放到MANIFEST中。现在执行mvn clean install,待构建完成之后打开target目录,可以看到hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者是带有Main-Class信息的可运行jar,后者是原始的jar,打开hello-world-1.0-SNAPSHOT.jar的META-INF/MAINFEST.MF,可以看到这样一行信息:
Main-Class: com.juvenxu.mvnbook.helloworld.HelloWorld现在在项目的根目录中执行该jar文件:D:\hello-world>Java -jar target\hello-world-1.0-SNAPSHOT.jarHello Maven控制台输出为Hello Maven,这正是我们期望的。

阅读全文
0 0