第一个手工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命令实际上就是在运行命令所对应的插件 )
4.打包
在 项目根目录下运行命令:mvn clean package
可以看到,在项目根目录下会生成target目录,target目录包含了打包好的jar包。
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,结果如下:
前者带main-class信息,后者不带,在项目根目录下运行命令 java -jar target/hello-world-0.0.1-SNAPSHOT.jar
结果如下: