Maven入门03—打包和运行
接上两章,将项目进行编译、测试之后,下一个步骤就是打包。POM.XML中可以指定打包类型,如果不指定,默认就是jar包。
Maven的打包类型,定义在pom.xml文件中的<packaging>标签中。打包类型有pom、jar、war三种。以下代码中,<packaging>jar</packaging>标签元素指定的是 jar包
三种打包类型 说明:
pom, 父级项目的打包类型
jar ,默认类型,如果没写packaging标签,则默认打成jar包(内部调用或作为服务)
war ,Web应用程序
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.xyd</groupId> <artifactId>MavenHello</artifactId> <version>1.1</version> <packaging>jar</packaging> <name>MavenHello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
在 cmd面板中进入 D:\maven-hello根目录,执行命令mvn clean package
可以看到如下输出:

Maven会在打包之前执行编译(compile),测试(test)等工作,上述输出可以看到,maven的jar插件会将项目的主代码打包成一个名为:MavenHello-1.1.jar的文件。该文件也位于target/输出目录中。命中规则是按照:artifactId-version.jar这方式命名的。
如果有需要,我们就可以复制这个MavenHello-1.1.jar的文件到其它项目的classpath路径中,从而使用其中的MavenHello类。
如何快捷的让这台开发电脑的其它Maven项目直接引用这个jar包呢!在cmd面板中,进入D:\maven-hello目录后,执行 mvn clean install命令就可以了。这样会把MavenHello-1.1.jar的文件复制到本地的maven仓库中,如下图所示。

maven的最主要命令 :mvn clean compile,mvn clean test, mvn clean package, mvn clean install。
执行test之前会先执行compile,执行package之前是会先执行test,执行install之前会先执行package。
到目前为止还没运行MavenHello 项目。MavenHello类有一个main方法,默认打包生成的jar是不能直接运行的,因为带有main方法的类信息不会添加到mainfest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Class一行)。为了生成可执行的jar文件,需要借助maven-shade-plugin,配置该插件如下。
<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.xyd.MavenHello.MavenHello</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
在D:\Maven-Hello目录下执行 mvn clean install命令,就可以在target目录下看到打包输出生成的两个jar包文件:MavenHello-1.1.jar、original-MavenHello-1.1.jar

此时的:MavenHello-1.1.jar中是带有Main-Class信息的可运行jar,而original-MavenHello-1.1.jar中是不带有Main-Class信息的不可运行的原始jar。用解压工具打开MavenHello-1.1.jar文件,可以看到MANIFEST.MF文件中包含这样一行信息:Main-Class:com.xyd.MavenHello.MavenHello,如下截图所示:

现在在项目的根目录中,执行该jar文件,
java -jar target\MavenHello-1.1.jar
如下图所示:
执行了MavenHello类的main方法,输出:Hello Maven!

浙公网安备 33010602011771号