基本概念
Maven坐标为各种构件引入了秩序,任务一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素
定义的,他们是groupId,artifactId,version,packaging,classifier
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<packaging>jar</packaging>
<version>3.0.6.RELEASE</version>
groupId: 定义当前Maven项目隶属的实际项目。
1:Maven项目和实际项目不一定是一对一的关系,比如SpringFramework这一实际项目,这是
由于Maven中模块的概念,因为一个实际项目往往被划分成很多模块
2:groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目
3:groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应
artifactId
定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
这样做的好处是方便寻找实际构件,在默认情况下,Maven生成的构件,其文件名会以artifactId作为
开头。如spring-core-3.0.6.RELEASE.jar
version
定义Maven项目当前所处的版本,如3.0.6.RELEASE
packaging
定义Maven项目的打包方式。
2:打包方式会影响构建的生命周期,比如jar打包和war打包使用不同的命令
3:当不定义packaging的时候,Maven会使用默认值jar
classifier
用来帮助定义构建输出的一些附属构件。附属构件与主构件对应,
如上例中的主构件是spring-core-3.0.6.RELEASE.jar,该项目可能还会通过使用一些插件生成如
spring-core-3.0.6.RELEASE-sources.jar,spring-core-3.0.6.RELEASE-doc.jar这样的附件构件,
其中包含了Java源代码和文档,这时候,javadoc和sources就是这两个附属构件的classifier.
这样附属也就拥有了自己唯一的坐标。
上述5个元素中,groupId,artifactId,version是必须定义的,packaging是可可选的(默认为jar),而
classifier是不能直接定义的。
同时,项目构件的文件名是与坐标相对应的,一般的规则为artifactId-version[-classifier].packaging
[-classifier]表示可选。
扩展内容
强调一点的是:packaging并非一定与构件扩展名对应,比如packaging为maven-plugin的构件的扩展名为jar
此外,Maven仓库的布局也是基于Maven坐标
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
任何一个Maven项目都需要定义自己的坐标,当这个Maven项目成为其他Maven项目的依赖的时候,这组坐标就体现了
其价值。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
注意:当依赖范围是test的时候,该依赖只会被加入到测试代码的classpath中,也就是说,对于项目主代码,
该依赖是没有任何作用的。JUnit是单元测试框架,只有在测试的时候才需要,因此使用该依赖范围
GreenMail是开源的邮件服务测试套件,其详细信息可访问:http://www.icegreen.com/greenmail
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
maven-compiler-plugin的配置,其目的是开启Java5的支持
Maven坐标为各种构件引入了秩序,任务一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素
定义的,他们是groupId,artifactId,version,packaging,classifier
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<packaging>jar</packaging>
<version>3.0.6.RELEASE</version>
groupId: 定义当前Maven项目隶属的实际项目。
1:Maven项目和实际项目不一定是一对一的关系,比如SpringFramework这一实际项目,这是
由于Maven中模块的概念,因为一个实际项目往往被划分成很多模块
2:groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目
3:groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应
artifactId
定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
这样做的好处是方便寻找实际构件,在默认情况下,Maven生成的构件,其文件名会以artifactId作为
开头。如spring-core-3.0.6.RELEASE.jar
version
定义Maven项目当前所处的版本,如3.0.6.RELEASE
packaging
定义Maven项目的打包方式。
1:打包方式通常与所生成构件的文件扩展名对应,如上例中的packaging为jar,
最终的文件名为spring-core-3.0.6.RELEASE.jar
而使用war打包方式的Maven项目,最终生成的构件会有一个.war文件,不过这不是绝对的。2:打包方式会影响构建的生命周期,比如jar打包和war打包使用不同的命令
3:当不定义packaging的时候,Maven会使用默认值jar
classifier
用来帮助定义构建输出的一些附属构件。附属构件与主构件对应,
如上例中的主构件是spring-core-3.0.6.RELEASE.jar,该项目可能还会通过使用一些插件生成如
spring-core-3.0.6.RELEASE-sources.jar,spring-core-3.0.6.RELEASE-doc.jar这样的附件构件,
其中包含了Java源代码和文档,这时候,javadoc和sources就是这两个附属构件的classifier.
这样附属也就拥有了自己唯一的坐标。
上述5个元素中,groupId,artifactId,version是必须定义的,packaging是可可选的(默认为jar),而
classifier是不能直接定义的。
同时,项目构件的文件名是与坐标相对应的,一般的规则为artifactId-version[-classifier].packaging
[-classifier]表示可选。
扩展内容
强调一点的是:packaging并非一定与构件扩展名对应,比如packaging为maven-plugin的构件的扩展名为jar
此外,Maven仓库的布局也是基于Maven坐标
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<packaging>maven-plugin</packaging>
maven-shade-plugin-2.0.jar
任何一个Maven项目都需要定义自己的坐标,当这个Maven项目成为其他Maven项目的依赖的时候,这组坐标就体现了
其价值。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
注意:当依赖范围是test的时候,该依赖只会被加入到测试代码的classpath中,也就是说,对于项目主代码,
该依赖是没有任何作用的。JUnit是单元测试框架,只有在测试的时候才需要,因此使用该依赖范围
GreenMail是开源的邮件服务测试套件,其详细信息可访问:http://www.icegreen.com/greenmail
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
maven-compiler-plugin的配置,其目的是开启Java5的支持