通过对<Maven基础学习(一)(二)>博客的学习,对如何通过maven构建项目有了一个大概的了解,本篇博客继续介绍......
1.在前面的博客中,我们已经成功通过maven构建了web项目,并将其编译,打包并安装到了本地仓库中,以供其他maven项目使用.
但是我们还没有成功运行此项目,当通过在cmd窗口执行java -jar target/maven-demo-1.0-SNAPSHOT.jar指令时,
会得到在maven-demo-1.0-SNAPSHOT.jar没有主清单属性的错误提示,说明通过maven打包生成的jar是不能直接运行的,
因为带有main方法的类信息不会添加到mainfest中,中(我们可以打开jar文件中的META-INF/MANIFEST.MF文件将无法看到Main-Class一行).
original-maven-demo-1.0-SNAPSHOT.jar和maven-demo-1.0-SNAPSHOT.jar前者是原始的jar,后者是带有Main-Class信息的可运行jar.
打开maven-demo-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含这样一行信息:
Main-Class: com.ilucky.maven.HelloWorld
1.在前面的博客中,我们已经成功通过maven构建了web项目,并将其编译,打包并安装到了本地仓库中,以供其他maven项目使用.
但是我们还没有成功运行此项目,当通过在cmd窗口执行java -jar target/maven-demo-1.0-SNAPSHOT.jar指令时,
会得到在maven-demo-1.0-SNAPSHOT.jar没有主清单属性的错误提示,说明通过maven打包生成的jar是不能直接运行的,
因为带有main方法的类信息不会添加到mainfest中,中(我们可以打开jar文件中的META-INF/MANIFEST.MF文件将无法看到Main-Class一行).
为了生成可执行的jar文件,我们需要借助maven-shade-plugin,直接看pom.xml文件.
<?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"
xsi: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.ilucky.maven</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Hello World</name>
<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.ilucky.maven.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2.配置完后,按照前面的博客执行mvn clean compile,mvn clean package指令,会发现在target目录下生成了两个jar文件
original-maven-demo-1.0-SNAPSHOT.jar和maven-demo-1.0-SNAPSHOT.jar前者是原始的jar,后者是带有Main-Class信息的可运行jar.
打开maven-demo-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含这样一行信息:
Main-Class: com.ilucky.maven.HelloWorld
然后在cmd窗口执行ava -jar target/maven-demo-1.0-SNAPSHOT.jar命令,会得到正确的结果.
先介绍到这里,请继续关注后面的博客......