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!

 

original-MavenHello-1.1.jar

posted on 2022-08-09 01:03  袁州东东  阅读(612)  评论(0)    收藏  举报