继Hello-Maven Clean and Compile后,我们来执行一下 mvn clean package
...
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ hello-maven ---
[INFO] Building jar: C:\Subversion\MavenPrj\helloMaven\target\hello-maven-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.329 s
[INFO] Finished at: 2018-06-06T09:36:22+08:00
[INFO] Final Memory: 17M/166M
[INFO] ------------------------------------------------------------------------
同样在打包前Maven会执行编译测试工作。
jar:jar任务负责打包,即jar插件的jar目标将项目主代码打包成一个名为hello-maven-1.0-SNAPSHOT.jar的文件。这个文件同样也位于target/输出目录,文件名根据artifact-version.jar规则命名
为了使Maven项目可以直接引用这个jar,我们还需要进行安装,即执行mvn clean install
...
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ hello-maven ---
[INFO] Building jar: C:\Subversion\MavenPrj\helloMaven\target\hello-maven-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ hello-maven ---
[INFO] Installing C:\Subversion\MavenPrj\helloMaven\target\hello-maven-1.0-SNAPSHOT.jar to C:\Repository\m2repo\com\play\myMaven\hello-maven\1.0-SNAP
SHOT\hello-maven-1.0-SNAPSHOT.jar
[INFO] Installing C:\Subversion\MavenPrj\helloMaven\pom.xml to C:\Repository\m2repo\com\play\myMaven\hello-maven\1.0-SNAPSHOT\hello-maven-1.0-SNAPSHO
T.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.201 s
[INFO] Finished at: 2018-06-06T09:47:42+08:00
[INFO] Final Memory: 18M/170M
[INFO] ------------------------------------------------------------------------
可以看到在执行install之前,Maven同样帮我们执行了clean resources compile test jar操作,在打包操作之后才执行了安装任务install:install。
install任务将项目输出的jar、和pom安装到了Maven本地仓库
install输出位置.png
补充说明一下maven的三种工程:
1.pom工程:用在父级工程或聚合工程中。用来做jar包的版本控制。
2.war工程:将会打包成war,发布在服务器上的工程。如网站或服务。
3.jar工程:将会打包成jar用作jar包使用。
默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MAINFEST.MF文件,将无法看看Main-Class一行)。MANIFEST.MF文件内容如下:
Manifest-Version: 1.0
Built-By: songyanyan
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_74
为了生成可执行的jar文件。需要借助maven-shade-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.play.myMaven.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我们配置的mainClass为com.play.myMaven.HelloWorld,项目在打包时会将信息放至MANIFEST中,再次执行mvn clean install:
[INFO] Building jar: C:\Subversion\MavenPrj\helloMaven\target\hello-maven-1.0-SNAPSHOT.jar
[INFO] maven-shade-plugin:2.4.3:shade (default) @ hello-maven -
有shade任务完成构建.png
original-hello-maven-1.0-SNAPSHOT.jar是原始jar
hello-maven-1.0-SNAPSHOT.jar是带有Main-Class信息的可运行jar,打开META-INF/MANIFEST.MF可以看到Main-Class信息
Manifest-Version: 1.0
Built-By: songyanyan
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_74
Main-Class: com.play.myMaven.HelloWorld
在项目根目录执行该jar文件 用命令java -jar [执行目标文件],在这里是java -jar target/hello-maven-1.0-SNAPSHOT.jar
C:\Subversion\MavenPrj\helloMaven>java -jar target/hello-maven-1.0-SNAPSHOT.jar
Hello World
控制台输出Hello World!
注:《Maven实战》学习笔记
网友评论