第一个手工Maven项目,hello-world

1.手工构建Maven项目目录

先创建项目主目录 helloworld, 在helloworld目录下创建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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- pom模型版本,对于Maven2和3来说,只能是4.0.0-->
<groupId>com.mvn</groupId>     <!--组名,和项目所在的组织或者公司相关联-->
<artifactId>hello-world</artifactId>       <!--该项目在组中的唯一ID-->
<version>0.0.1-SNAPSHOT</version>    <!--该项目的当前版本-->
</project>

这段配置中最重要的三个标签元素, groupid,artifactId,version,这三个元素定义了一个项目的基本坐标,在maven的世界,任何的jar,pom,或者war都是基于这些基本的坐标元素来区分的。

2.编写主代码

在helloworld目录下依次创建文件夹/src/main/java(maven项目约定,主代码都放到这个目录结构下,maven会自动到该目录下搜索项目主代码)

java目录下依次创建文件夹和主文件:com/mvn /Helloworld.java 

package com.mvn;


public class HelloWorld{
public void sayHello(){
   System.out.println("Hello World");
}
public static void main(String[] args){
  new HelloWorld().sayHello();
}
}

3.编译

在项目根目录下运行命令 mvn clean compile (要保证机器可以连接互联网,首次运行maven命令,maven会先去中央仓库下载插件,运行maven命令实际上就是在运行命令所对应的插件 )

第一个手工Maven项目,hello-world

4.打包

在 项目根目录下运行命令:mvn  clean package

    第一个手工Maven项目,hello-world           

可以看到,在项目根目录下会生成target目录,target目录包含了打包好的jar包。                            

        第一个手工Maven项目,hello-world

   5 运行

maven默认打包生成的jar是不可直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF,无法看到Main-Class移行),因此需要借助maven-shade-plugin,配置该插件如下:

<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>   
<execution>
<phase>package</phase>
           <goals><goal>shade</goal></goals>         
           <configuration>           
                <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">                     <mainClass>

               com.mvnbook.HelloWorld

               </mainClass>              
                </transformer>            
            </transformers>           
            </configuration>               
</execution>
</executions>
  </plugin>
</plugins>
  </build>
</project>

重新运行 mvn clean package,结果如下:

第一个手工Maven项目,hello-world

前者带main-class信息,后者不带,在项目根目录下运行命令 java -jar target/hello-world-0.0.1-SNAPSHOT.jar

结果如下:

第一个手工Maven项目,hello-world