在maven
的世界里,一切都从pom
文件开始......
下面是一个入门级helloworld
项目的 pom
配置文件:
<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.zheng.mvnstudy</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name> Maven Hello World Project </name>
</project>
pom
文件中的groupId
、artifactId
、version
三个元素定义了项目的基本坐标,在maven
中,任何jar,pom,war
都是以这些基本坐标元素来区分的。
无规矩不成方圆,在pom
文件中定义的元素都有各自的规范。
groupId定义了项目所属组,通常与公司或组织有关,格式形如公司或组织网址反序.项目名(假设域名为www.zheng.com
建立的一个myapp
项目,最后命名为com.zheng.myapp
)
artifactId项目模块名,在所属组中唯一,用于区分不同的模块,比如上面的hello-world
,格式形如项目名-模块名
version定义了当前项目的版本,在maven
中定义了几个版本符号SNAPSHOT
(开发版),alpha
,(内部测试版),beta
(外部测试),release
(发布版),根据项目不同情况填写不同的版本标识
name为当前项目模块声明了一个友好的名称,虽然不是必须的,但是建议为每一个项目模块都定义一个友好的名称,方便信息交流
maven与java代码之间是相互解耦互相不影响的
maven项目结构
project-name
src
main
java
resources
test
java
resources
其中src/main/
里面的代码被称之为主代码,在打包时会打包到最终的构建中,src/test
下面的代码为测试代码,打包时将被忽略
代码包名定义规范
groupId/artifactId
相吻合,项目中java类包都应该基于项目的groupId
和artifactId
,比如上面的hello-world模块主代码包为:src/main/java/com/zheng/mvnstudy/helloworld
maven
的功能非常强大,它还可以配置各种插件以满足项目需要,下面的插件将项目编译环境设置成了jdk1.8
<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>
当maven
开始构建项目时,它会自动完成对项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作
maven生成可运行的jar
java
编译环境可以直接对包含main
方法的类打包成jar包并运行,在maven
中也可以做到这一点,但要实现这个功能,需要借助额外的插件maven-shade-plugin
提示:maven
常规打包生成的jar
包是无法直接运行的,因为带有main
方法的类信息不会直接添加到MANIFEST
文件中(打开jar
文件中的META-INF/MANIFEST.MF
将无法看到Main-Class
一项参数)
<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.zheng.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
使用archetype
生成项目骨架
maven3
提供了一个archetype
工具用于帮助用户自动生成maven项目结构,通过CMD
进入到项目目录中直接运行mvn archetype:generate
下面是运行命令之后的结果
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 984: Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 5: Define value for property 'groupId': : com.zheng.helloworld Define value for property 'artifactId': : hello-world-archetype Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': com.zheng.helloworld: : Confirm properties configuration: groupId: com.zheng.helloworld artifactId: hello-world-archetype version: 1.0-SNAPSHOT package: com.zheng.helloworld Y: : Y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: basedir, Value: D:\workspace\maven-study [INFO] Parameter: package, Value: com.zheng.helloworld [INFO] Parameter: groupId, Value: com.zheng.helloworld [INFO] Parameter: artifactId, Value: hello-world-archetype [INFO] Parameter: packageName, Value: com.zheng.helloworld [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: D:\workspace\maven-study\hello-world-archetype [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:10 min [INFO] Finished at: 2017-06-17T23:07:00+08:00 [INFO] Final Memory: 15M/178M [INFO] ------------------------------------------------------------------------
最后会在项目目录下生成项目的基本结构
以上是我学习《maven实战》一书前三章所做的笔记要点,写在简书上主要是方便自己查阅,当然如果我的笔记能帮到大家那我也是非常开心的
网友评论