注:转载时请注明原作者(lreis2010)及出处(http://blog.csdn.net/lreis2010/)!
作者初次接触Maven是希望有一种方式能够自动化地管理项目中使用的Jar包。随着对于Maven的学习,可以了解到这是Maven的一大功能-管理项目依赖(Dependency)。
为了管理项目依赖(Dependency),即各种Jar包,Maven必须能够精确地定位每一个Jar包,为此,Maven引入了坐标的概念。
坐标,用于唯一标识一个物体的一组数据。
下面是Maven对于Dependency的定义:(由于页面大小,作者删除了部分信息。有意者可以查看源文件(Dependency.java))
package org.apache.maven.model;
public class Dependency
implements java.io.Serializable, java.lang.Cloneable, org.apache.maven.model.InputLocationTracker
{
//--------------------------/
//- Class/Member Variables -/
//--------------------------/
private String groupId;
private String artifactId;
private String version;
private String type = "jar";
private String classifier;
private String scope;
private String systemPath;
private java.util.List<Exclusion> exclusions;
private String optional;
private java.util.Map<Object, InputLocation> locations;
//-----------/
//- Methods -/
//-----------/
}
可见,Maven对于Dependency的坐标定义为(groupId,artifactId,version,type,classifier,scope)。
1)groupId(The project group that produced the dependency)
groupId定义的是当前该Dependency所隶属的项目。例如Maven项目本身分为多个子项目:Settings、Settings Builder、Model Builder等,子项目Artifact的groupId定义为org.apache.maven。
2)artifactId(The unique id for an artifact produced by the project group)
artifactId定义的是该Artifact(子项目,暂时这么理解吧。好像Maven对它有更多的定义,以后有机会再修改吧)所标识的唯一标识。例如上文中的Artifact的artifactId定义为maven-artifact。首先,该artifactId标注了该子项目所隶属的项目maven,其次又唯一标示了该子项目artifact。
3)version(The version of the dependency)
version定义的是该依赖的版本号,Maven有一定的规范。等作者解析到了再分析。
4)type(The type of dependency)
type定义的是该依赖的打包方式,默认值为jar。该值涉及到ArtifactHandler,即Artifact的处理方式,稍后再议。
5)classifier( The classifier of the dependency)
classifier用来标识构建过程中的一些附属构件。该值涉及到ArtifactHandler,即Artifact的处理方式,稍后再议。
6)scope(The scope of the dependency)
classifier定义的是该依赖的使用范围。在Artifact类中有对于各种Scope的定义,包括Artifact.SCOPE_COMPILE、Artifact.SCOPE_COMPILE_PLUS_RUNTIME、Artifact.SCOPE_TEST、Artifact.SCOPE_RUNTIME、Artifact.SCOPE_RUNTIME_PLUS_SYSTEM、Artifact.SCOPE_PROVIDED、Artifact.SCOPE_SYSTEM、Artifact.SCOPE_IMPORT。
其中(groupId,artifactId,version)是必须的元素,type是可选的,默认值为jar。