Maven的artifact是指一個專案(project)建構(build)後產生的東西,中文可翻為"製品"或"構造物"或"構件"。
Artifact: An artifact is something that is either produced or used by a project. Examples of artifacts produced by Maven for a project include: JARs, source and binary distributions, WARs. Each artifact is uniquely identified by a group id and an artifact ID which is unique within a group.
最常見的artifact就是jar檔,此外也可能是war檔,pom檔等。這些Maven建構專案所生成的檔案在Maven的術語通稱為artifact。
每一個artifact都以groupId、artifactId與version來做為唯一識別,這三者的組合又稱為Maven Coordinates(Maven座標),用以區別其他的artifact。
groupId通常是以domain來命名,例如com.example。而artifactId通常是專案名稱。而每個artifact的不同版本就用versoin來區分。
你可能會覺得groupId和Java的package用途很類似,兩者有什麼分別? 其實你想得沒錯,artifact的groupId和class的package的作用都是用來區分相同名稱的東西,不過一個是區分artifact,一個是區分class。
例如我所在的公司domain為abc.com,則groupId可命名為com.abc,開發的專案名稱為banana,則artifactId命名為banana,版本為0.0.1-SNAPSHOT,則在Maven專案的pom.xml
如下。
<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.abc</groupId>
<artifactId>banana</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
以實際的例子來看,下面是Spring Core 5.0.8.RELEASE的artifact的Maven Dependency,而其實就是指Spring Core 5.0.8.RELEASE的jar檔。下面的意思就依賴org.springframework.spring-core這個artifact,版本為5.0.8.RELEASE。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
換個方式來解釋,今天我在Eclipse建立一個banana的Maven專案,並打算將banana專案打包成一個jar檔給其他專案來使用,則這個jar檔就是banana專案生成的artifact。
所以我們在Eclipse建立一個新的Maven專案時,都會要我們命名groupId,artifactId。若日後其他的Maven專案要利用到這個專案中的程式,則我們可以用Maven建構此專案的artifact(打包成jar)並發佈在Maven repository(至於怎麼發佈到repository在此先不討論),接著在另一個專案的pom.xml
的dependency中撰寫以下來匯入jar檔。
<dependency>
<groupId>com.abc</groupId>
<artifactId>banana</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
下面用Eclipse來說明可能會比較清楚。
首先在Eclipse(OXYGEN)中建立一個簡單的Maven Project。
點選上方功能選單的File -> New -> Maven Project
。
勾選[Create a simple project (skp archetype selection)]然後按Next >。
輸入[Group Id]及[Artifact Id]的名稱,[Version]使用預設的0.0.1-SNAPSHOT,[Packaging]選擇jar。然後按Finish。
完成後可在Eclipse左側的Project Explore看到新建的banana Maven專案,自動產生的pom.xml
內容如下
<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.abc</groupId>
<artifactId>banana</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
接著執行Maven build將此專案打包成jar檔,這個動作就是生成所謂的artifact。
在banana專案名稱上按滑鼠右鍵,選擇Run As -> 3 Maven build...
在[Goals]欄位輸入package,其餘保持預設,然後按Run來執行。(package指令用來編譯並打包)
接著可以在Eclipse的Console看到印出如下的訊息。
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building banana 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ banana ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ banana ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ banana ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ banana ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ banana ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ banana ---
[INFO] Building jar: D:\MyProject\jdk8\workspace\banana\target\banana-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.515 s
[INFO] Finished at: 2018-08-26T20:53:41+08:00
[INFO] Final Memory: 10M/155M
[INFO] ------------------------------------------------------------------------
執行完後重新整理banana專案,可以在專案目錄下的target
資料夾看到Maven build生成的artifact,也就是jar檔。
沒有留言:
張貼留言