注:轉載時請註明原作者(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。