@Maven POM 詳解

  • 前言
    • 什么是 POM
    • Quick Overview
  • POM 常用元素
  • pom.xml 完整注釋
  • 參考

0 前言

什么是 POM鲫尊?

就像 Make 的 MakeFile堡牡、Ant 的 build.xml 一樣槐瑞,Maven 項目的核心是 pom.xml。POM( Project Object Model,項目對象模型 ) 定義了項目的基本信息臀脏,用于描述項目如何構(gòu)建虏冻,聲明項目依賴肤粱,等等。

Quick Overview

一個完整的 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>
 
  <!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>
 
  <!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>
 
  <!-- More Project Information -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>
 
  <!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists>
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>


tips:這里的 pom.xmlmodelVersion 為 4.0.

1 POM 常用元素

1.1 The Basics

1.1.1 Maven 坐標(biāo)( Coordinate )

在 Maven 中坐標(biāo)是構(gòu)件的唯一標(biāo)識领曼,Maven 坐標(biāo)的元素包括 groupIdartifactId领铐、version悯森、packagingclassifier绪撵。上述5個元素中瓢姻,groupIdartifactId音诈、version 是必須定義的幻碱,packaging 是可選的 ( 默認(rèn)為 jar )绎狭。

  • groupId:組織標(biāo)識,一般為:公司網(wǎng)址的反寫+項目名
  • artifactId:項目名稱褥傍,一般為:項目名-模塊名
  • version:版本號
  • packaging:打包的方式儡嘶,如:pom, jar, maven-plugin, ejb, war, ...
  • clissifier:用來幫助定義構(gòu)件輸出的一些附屬構(gòu)件』蟹纾可參考此文

另外蹦狂,關(guān)于 版本號 ,形式為0.0.1-SNAPSHOT

  • 第一個 0 表示大版本號朋贬,第二個 0 表示分支版本號凯楔,第三個 0 表示小版本號
  • SNAPSHOT -- 快照版本,ALPHA -- 內(nèi)側(cè)版本锦募,BETA -- 公測版本摆屯,RELEASE -- 穩(wěn)定版本,GA -- 正式發(fā)布

在我們開發(fā)自己的 maven 項目的時候糠亩,需要為其定義適當(dāng)?shù)淖鴺?biāo)虐骑,如:

<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>
 
  <!-- 項目的全球唯一標(biāo)識符,通常使用全限定的包名區(qū)分該項目和其他項目赎线。并且構(gòu)建時生成的路徑也是由此生成廷没, 如com.seyvoue.demo生成的相對路徑為:/com/seyvoue/demo--> 
  <groupId>com.seyvoue.demo</groupId>
  <!-- 構(gòu)件的標(biāo)識符,它和 groupId 一起唯一標(biāo)識一個構(gòu)件氛驮。換句話說腕柜,你不能有兩個不同的項目擁有同樣的 artifactId 和 groupId;在某個特定的 groupId 下矫废,artifactId也必須是唯一的盏缤。-->
  <artifactId>demo-maven</artifactId>
  <!-- 項目當(dāng)前版本,格式為:主版本.次版本.增量版本-限定版本號-->
  <version>1.0.0-SNAPSHOT</version>
  <!-- 項目產(chǎn)生的構(gòu)件類型蓖扑,例如 jar唉铜、war、pom 等律杠。插件可以創(chuàng)建他們自己的構(gòu)件類型潭流,所以前面列的不是全部構(gòu)件類型-->
  <packaging>jar</packaging>
  
  ...
  
</project>

1.1.2 依賴: <dependencies>...</dependencies>

比如,我的項目 project-demo1 需要添加 junit 依賴:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
</dependencies>


dependencies元素柜去,包括以下子元素:

  • groupId, artifactId, version

這三個是必須的灰嫉,以下的那些子元素根據(jù)實(shí)際情況添加。

  • scope

scope 元素為 maven dependency 下一個控制作用域的子元素嗓奢,控制該依賴包在什么情況下會被加到 classpath 中讼撒。共 6 種 scope,包括:compileprovided根盒、runtime钳幅、testsystem炎滞、import敢艰。
( 具體可參考@POM Dependency Scope )

  • type

對于于 <packaging>...</packaging> ,即指定依賴包的后綴册赛,默認(rèn)為 jar

  • optional

如果當(dāng)前仙姑是 projectA钠导,projectA 需要依賴 projectB,而 projectB 的 optional 為 true森瘪,表示依賴可選辈双,那么之后所有聲明依賴 projectA 的項目如果也依賴 projectB,就必須手動聲明柜砾。
比如,projectC 依賴 projectA 和 projectB换衬,如果 projectC只聲明了對 projectA 的依賴痰驱,那么 projectB 不會自動加入依賴,projectA 必須手動加入對 projectB 的依賴瞳浦。
也就是說依賴傳遞被打斷了担映。

  • exclusions

依賴傳遞:如果我們的項目引用了一個 Jar 包,而該 Jar 包又引用了其他 Jar 包叫潦,那么在默認(rèn)情況下項目編譯時蝇完,Maven 會把直接引用和間接引用的 Jar 包都下載到本地。

排除依賴:如果我們只想下載直接引用的 Jar包矗蕊,
那么需要在 pom.xml 中做如下配置:(將需要排除的 Jar 包的坐標(biāo)寫在中)

<dependency>
 ...     
 <exclusions>
   <exclusion>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
   </exclusion>
 </exclusions>
 ...
</dependency>

依賴沖突:若項目中多個 Jar 同時引用了相同的 Jar 時短蜕,會產(chǎn)生依賴沖突,但 Maven 采用了兩種避免沖突的策略傻咖,因此在 Maven 中是不存在依賴沖突的朋魔。

  • 短路優(yōu)先
    本項目——>A.jar——>B.jar——>X.jar
    本項目——>C.jar——>X.jar
    若本項目引用了 A.jar,A.jar 又引用了 B.jar卿操,B.jar 又引用了 X.jar警检,并且 C.jar 也引用了X.jar。
    在此時害淤,Maven 只會引用引用路徑最短的Jar扇雕。
  • 聲明優(yōu)先
    若引用路徑長度相同時,在pom.xml中誰先被聲明窥摄,就使用誰镶奉。

1.1.3 聚合: <modules>...</modules>

通過 <modules>...<modules> 元素可將多個模塊聚合在同一個 project 下。

<project>  
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.seyvoue.account</groupId>
    <artifactId>account-aggregator</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    ...
    
    <!--模塊(有時稱作子項目) 被構(gòu)建成項目的一部分。列出的每個模塊元素是指向該模塊的目錄的相對路徑-->
    <modules>  
        <module>account-email</module>  
        <module>account-persist</module>  
    </modules>
</project>  

1.1.4 繼承: <parent>...</parent> 和 <dependencyManagement>...</dependencyManagement>

在聚合多個項目時腮鞍,如果這些被聚合的項目中需要引入相同的 Jar值骇,那么可以將這些 Jar 寫入 父pom 中,各個子項目繼承該pom即可移国。類似與 java 中的繼承吱瘩。
(具體可參考@Maven的聚合與繼承)

如何實(shí)現(xiàn)繼承? 示例如下:

  • 父 pom.xml:
  • <packaging>...</packaging> 必須配置為 pom
  • 將需要繼承的 Jar 包的坐標(biāo)放入<dependencyManagement>...</dependencyManagement> 內(nèi)即可
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.seyvoue.demo</groupId>
  <artifactId> demo-maven </artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
 
  ...
  <properties>
     <spring.version>4.0.2.RELEASE</spring.version>
     <junit.versoin>4.7</junit.version>
     ...
  </properties>
  
  <!-- 繼承自該項目的所有子項目的默認(rèn)依賴信息迹缀。這部分的依賴信息不會被立即解析,而是當(dāng)子項目聲明一個依賴(必須描述group ID和 artifact ID信息)使碾,如果group ID和artifact 
  ID以外的一些信息沒有描述,則通過group ID和artifact ID 匹配到這里的依賴祝懂,并使用這里的依賴信息票摇。-->
  <dependencyManagement>
    <dependencies>
      <dependency>
            <groupId>com.github.brevy</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.2.2</version>
      </dependency>
      ...
    </dependencies>
  </dependencyManagement>
  ...
  
</project> 

  • 子 pom.xml:

<parent>...</parent> 標(biāo)簽內(nèi)添加 父pom.xml 的坐標(biāo)

<project>  
    <modelVersion>4.0.0</modelVersion> 
    ... 
    <parent>  
        <groupId>com.seyvoue.demo</groupId>  
        <artifactId> demo-maven </artifactId>  
        <version>1.0.0-SNAPSHOT</version>
        <!-- 父pom.xml文件的相對路徑。相對路徑允許你選擇一個不同的路徑砚蓬。默認(rèn)值是../
        pom.xml矢门。Maven首先在構(gòu)建當(dāng)前項目的地方尋找父pom.xml,其次在文件系統(tǒng)的這個位置(relativePath位置)灰蛙,然后在本地倉庫祟剔,最后在遠(yuǎn)程倉庫尋找父項目的pom。-->
        <relativePath>...</relativePath>  
    </parent>
    
    <!-- 子 POM 若引用父 POM 在 dependencyManagement 中定義過的依賴摩梧,則只需填寫 groupId 和 artifactid物延,其它的信息則會從父 POM 中繼承 -->
    <dependencies>
        <dependency>
             <groupId>com.github.brevy</groupId>
             <artifactId>shiro-spring</artifactId>
        </dependency>
        ...
    </dependencies>
    
    ...


</project>  

  • Maven 可繼承的 POM 元素:
groupId :項目組 ID ,項目坐標(biāo)的核心元素仅父;  
version :項目版本叛薯,項目坐標(biāo)的核心元素;  
description :項目的描述信息笙纤;  
organization :項目的組織信息耗溜;  
inceptionYear :項目的創(chuàng)始年份;  
url :項目的 url 地址  
develoers :項目的開發(fā)者信息省容;  
contributors :項目的貢獻(xiàn)者信息强霎;  
distributionManagerment :項目的部署信息;  
issueManagement :缺陷跟蹤系統(tǒng)信息蓉冈;  
ciManagement :項目的持續(xù)繼承信息城舞;  
scm :項目的版本控制信息;  
mailingListserv :項目的郵件列表信息寞酿;  
properties :自定義的 Maven 屬性家夺;  
dependencies :項目的依賴配置;  
dependencyManagement :醒目的依賴管理配置伐弹;  
repositories :項目的倉庫配置拉馋;  
build :包括項目的源碼目錄配置、輸出目錄配置、插件配置煌茴、插件管理配置等随闺;  
reporting :包括項目的報告輸出目錄配置、報告插件配置等蔓腐。  

1.1.5 屬性:<properties>...</properties> 和 &{}

Maven 的 properties 加載順序:

  • <build><filters> 中的配置
  • pom.xml 中的 <properties>
  • mvn -Dproperty=value 中定義的 property
    相同 key 的 property矩乐,以最后一個文件中的配置為最終配置。
<project>
  ...
  <properties>
    <maven.compiler.source>1.7<maven.compiler.source>
    <maven.compiler.target>1.7<maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  ...
</project>

通過 properties元素用戶可以定義一個或多個 maven 屬性回论,然后在 maven 的其他地方使用 ${屬性名稱} 的方式引用該屬性散罕,這種做法的意義在于消除重復(fù)和統(tǒng)一管理。比如傀蓉,需要在多個地方重復(fù)聲明同樣的 SpringFramework 版本欧漱,現(xiàn)在只需要在一個地方聲明就可以。Maven 共有6種屬性(根據(jù)引用的來源不同):內(nèi)置屬性葬燎、POM 屬性误甚、自定義屬性、Settings 屬性谱净、環(huán)境變量屬性等靶草,引用方式是類似的,下面介紹其中的集中

  • 內(nèi)置屬性

兩個常用內(nèi)置屬性:

  • ${basedir} 表示項目根目錄
  • ${version} 表示項目版本
  • POM 屬性

用戶可以使用該類屬性引用 pom.xml 中對應(yīng)元素的值岳遥,如 ${project.artifactId} 就對應(yīng)了 <project><artifactId></artifactId></project> 中的值。常用的 POM 屬性包括:

  • ${project.build.sourceDirectory} 表示項目的主源碼目錄裕寨,默認(rèn)為 src/main/java
  • ${project.build.testDirectory} 表示項目的測試源碼目錄浩蓉,默認(rèn)為 src/test/java
  • ${project.build.directory} 表示項目項目構(gòu)建輸出目錄,默認(rèn)為 /target
  • ${project.outputDirectory} 表示項目主代碼編譯輸出目錄宾袜,默認(rèn)為 /target/classes
  • ${project.build.filename} 表示項目打包輸出文件的名稱捻艳,默認(rèn)為 ${project.artifactId}-${project.version}
  • 自定義屬性

用戶可以在 pom.xml 的<properties/> 元素下定義自己的 Maven 屬性。如:

<project>
   ...
   <properties>
       <my.group>hello</my.group>
   </properties>
   ...
</project>

  • settings 屬性

與 POM 屬性同理庆猫。maven settings.xml 中定義的內(nèi)容认轨,可以通過 settings 前綴進(jìn)行引用。

${settings.localRepository} 表示 maven 本地倉庫的路徑
${settings.offline} 表示構(gòu)建系統(tǒng)是否在離線模式下工作

1.2 Build Settings

根據(jù) POM 4.0.0 XSD月培,build 元素概念性的劃分為兩個部分:BaseBuild(包含 poject build 和 profile build 的公共部分嘁字,見下)和 poject build 包含的一些高級特性。

<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">  
    ...  
    <!-- "Project Build" contains more elements than just the BaseBuild set -->  
    <build>...</build>  
  
  
    <profiles>  
        <profile>  
            <!-- "Profile Build" contains a subset of "Project Build"s elements -->  
            <build>...</build>  
        </profile>  
    </profiles>  
</project>  

1.2.1 <build>...</build>

1.2.1.1 The BaseBuild Element Set
Basic Elements
<build>  
    <defaultGoal>install</defaultGoal>  
    <directory>${basedir}/target</directory>  
    <finalName>${artifactId}-${version}</finalName>  
    <filters>  
        <filter>filters/filter1.properties</filter>  
    </filters>  
    ...  
</build>  

  • defaultGoal:執(zhí)行build任務(wù)時杉畜,如果沒有指定目標(biāo)纪蜒,將使用的默認(rèn)值,如:在命令行中執(zhí)行mvn此叠,則相當(dāng)于執(zhí)行mvn install纯续;
  • directory:build目標(biāo)文件的存放目錄,默認(rèn)在 ${basedir}/target目錄
  • finalName:build目標(biāo)文件的文件名,默認(rèn)情況下為${artifactId}-${version}
  • filter:定義*.properties文件猬错,包含一個properties列表窗看,該列表會應(yīng)用的支持filter的resources中。也就是說倦炒,定義在filter的文件中的"name=value"值對會在build時代替 ${name} 值應(yīng)用到 resources 中显沈。Maven的默認(rèn)filter文件夾是 ${basedir}/src/main/filters/
<Resources>...</Resources>

Maven 屬性默認(rèn)只有在 pom.xml 中才會被解析,對于放在 src/main/resources/ 目錄下的文件析校,maven 是需要通過 maven-resources-plugin 插件幫忙處理的构罗,它默認(rèn)的行為是將項目資源文件復(fù)制到代碼編譯輸出目錄中,不過只要通過一些簡單的 POM 配置智玻,該插件就能解析資源文件中的 Maven 屬性遂唧,即開啟資源過濾。
resources(通常)不是代碼吊奢,他們不被編譯盖彭,但是被綁定在你的項目或者用于其它什么原因,例如代碼生成页滚。

<build>  
    ...  
    <resources>  
         <resource>  
            <targetPath>META-INF/plexus</targetPath>  
            <filtering>false</filtering>  
            <directory>${basedir}/src/main/plexus</directory>  
            <includes>  
                <include>configuration.xml</include>  
            </includes>  
            <excludes>  
                <exclude>**/*.properties</exclude>  
            </excludes>  
         </resource>  
    </resources>  
    <testResources>  
        ...  
    </testResources>  
    ...  
</build>  
  • resources:一個resource元素的列表召边,每一個都描述與項目關(guān)聯(lián)的文件是什么和在哪里;
  • targetPath:指定build后的resource存放的文件夾裹驰。該路徑默認(rèn)是basedir隧熙。通常被打包在JAR中的resources的目標(biāo)路徑為META-INF;
  • filtering:true/false幻林,表示為這個resource贞盯,filter是否激活。
  • directory:定義resource所在的文件夾沪饺,默認(rèn)為 ${basedir}/src/main/resources
  • includes:指定作為resource的文件的匹配模式躏敢,用 * 作為通配符;
  • excludes:指定哪些文件被忽略整葡,如果一個文件同時符合 includesexcludes件余,則 excludes生效;
  • testResources:定義和 resource 類似遭居,但只在 test 時使用啼器,默認(rèn)的 test resource文件夾路徑是 ${basedir}/src/test/resourcestest resource 不被部署俱萍。
<plugins>...</plugins>

<plugins/> 給出構(gòu)建過程中所用到的插件镀首,以及可以在這個元素下對插件進(jìn)行配置。

<build>  
 ...  
 <plugins>  
   <plugin>  
     <groupId>org.apache.maven.plugins</groupId>  
     <artifactId>maven-jar-plugin</artifactId>  
     <version>2.6</version>  
     <extensions>false</extensions>  
     <inherited>true</inherited>  
     <configuration>  
       <classifier>test</classifier>  
     </configuration>  
     <dependencies>...</dependencies>  
     <executions>
       <excution>
         <id>echodir</id>
         <goals>
           <goal>run</goal>
         </goals>
         <phase>verify</phase>
         <inherited>false</inherited>
         <configuration>
           <task>
             <echo>Build Dir: ${project.build.directory}</echo>
           </task>
         </configuration>
       </excution>
     </executions>  
   </plugin>  
 </plugins>  
</build>  

  • extensions:是否加載該插件的擴(kuò)展鼠次,默認(rèn)false
  • inherited:該插件的 configuration 中的配置是否可以被(繼承該P(yáng)OM的其他Maven項目)繼承更哄,默認(rèn)true
  • configuration:該插件所需要的特殊配置芋齿,在父子項目之間可以覆蓋或合并
  • dependencies:該插件所特有的依賴類庫
  • executions:plugin 可以有多個目標(biāo),每一個目標(biāo)都可以有一個分開的配置成翩,甚至可以綁定一個 plugin 的目標(biāo)到一個不同的階段觅捆。executions 配置一個 plugin 的目標(biāo)的 execution。一個 execution 有如下設(shè)置:
    • id栅炒,唯一標(biāo)識
    • goals术羔,要執(zhí)行的插件的 goal(可以有多個),如 <goal>run</goal>
    • phase级历,目標(biāo)執(zhí)行的階段,具體值看Maven的生命周期列表
    • inherited玩讳,該 execution 是否可被子項目繼承
    • configuration,該 execution 的其他配置參數(shù)
<pluginManagement>...<pluginManagement>

<build> 中嚼贡,<pluginManagement><plugins> 并列,兩者之間的關(guān)系類似于 <dependencyManagement><dependencies> 之間的關(guān)系樟澜。<pluginManagement> 中也配置 <plugin>秩贰,其配置參數(shù)與 <plugins> 中的 <plugin> 完全一致熊户。只是嚷堡,<pluginManagement> 往往出現(xiàn)在父項目中蝌戒,其中配置的 <plugin> 往往通用于子項目沼琉。子項目中只要在 <plugins> 中以 <plugin> 聲明該插件打瘪,該插件的具體配置參數(shù)則繼承自父項目中 <pluginManagement> 對該插件的配置,從而避免在子項目中進(jìn)行重復(fù)配置妆档。

1.2.2 <reporting>...</reporting>

<reporting> 中的配置作用于 Maven 的 site 階段( 見 Maven 生命周期)贾惦,用于生成報表须板。<reporting> 中也可以配置插件 <plugins>兢卵,并通過一個 <plugin> 的 <reportSet>為該插件配置參數(shù)济蝉。注意王滤,對于同時出現(xiàn)在 <build> 和 <reporting> 中的插件雁乡,<reporting> 中對該插件的配置也能夠在構(gòu)建過程中生效踱稍,即該插件的配置是<build>和<reporting>中的配置的合并珠月。

1.3 Environment Settings

<SCM>...</SCM>

Maven中為我們集成了軟件配置管理的(SCM:Software Configuration Management)功能啤挎,他可以支持我們常用SVN庆聘、CVS等伙判,共支持18個命令:

scm:branch - branch the project(創(chuàng)建項目的分支)
scm:validate - validate the scm information in the pom(校驗(yàn)SCM的配置信息)
scm:add - command to add file(增加一個文件)
scm:unedit - command to stop editing the working copy(停止編輯當(dāng)前COPY)
scm:export - command to get a fresh exported copy(拉一個全新的分支)
scm:bootstrap - command to checkout and build a project(checkout并編譯工程)
scm:changelog - command to show the source code revisions(顯示源碼版本)
scm:list - command for get the list of project files(列出工程的文件)
scm:checkin - command for commiting changes(提交變更)
scm:checkout - command for getting the source code(獲取源碼)
scm:status - command for showing the scm status of the working copy(獲取本地項目的狀態(tài))
scm:update - command for updating the working copy with the latest changes(從服務(wù)器獲取最新的版本)
scm:diff - command for showing the difference of the working copy with the remote one(比較本地與遠(yuǎn)程服務(wù)器的差異)
scm:update-subprojects - command for updating all projects in a multi project build(更新子項目)
scm:edit - command for starting edit on the working copy(編輯)
scm:tag - command for tagging a certain revision(打標(biāo)簽)
 

tips:而其中的 mvn scm:checkin, mvn scm:update是其中比較常用的命令宴抚。

比如,對 git 的配置如下:

<project>

    ...

    <scm>     
        <!--SCM的URL,該URL描述了版本庫和如何連接到版本庫危虱。欲知詳情埃跷,請看SCMs提供的URL格式和列表弥雹。該連接只讀剪勿。-->     
        <connection>     
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)      
        </connection>     
        <!--給開發(fā)者使用的厕吉,類似connection元素头朱。即該連接不僅僅只讀-->    
        <developerConnection>     
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk      
        </developerConnection>    
        <!--當(dāng)前代碼的標(biāo)簽项钮,在開發(fā)階段默認(rèn)為HEAD-->    
        <tag/>           
        <!--指向項目的可瀏覽SCM庫(例如ViewVC或者Fisheye)的URL烁巫。-->     
        <url>http://svn.baidu.com/banseon</url>     
    </scm> 
    
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.5.3</version>
        <configuration>
            <tagBase>${git.conn}</tagBase>
            <branchBase>${git.conn}</branchBase>
            <username>${git.username}</username>
            <password>${git.password}</password>
        </configuration>
    </plugin>
    
    ...

</project>

<distributionManagement>...</distributionManagement>

maven 中的倉庫分為兩種亚隙,snapshot 快照倉庫和 release 發(fā)布倉庫阿弃。snapshot 快照倉庫用于保存開發(fā)過程中的不穩(wěn)定版本恤浪,release 正式倉庫則是用來保存穩(wěn)定的發(fā)行版本。定義一個組件/模塊為快照版本赛蔫,只需要在 pom 文件中在該模塊的版本號后加上-SNAPSHOT即可(注意這里必須是大寫)呵恢,在distributionManagement段中配置的是snapshot快照庫和release發(fā)布庫的地>址渗钉。

<project>
  <!--項目分發(fā)信息鳄橘,在執(zhí)行mvn deploy后表示要發(fā)布的位置瘫怜。有了這些信息就可以把網(wǎng)站部署到遠(yuǎn)程服務(wù)器或者把構(gòu)件部署到遠(yuǎn)程倉庫鲸湃。--> 
  <distributionManagement>
          <!--部署項目產(chǎn)生的構(gòu)件到遠(yuǎn)程倉庫需要的信息--> 
          <repository>
              <id>${distribution.releases.id}</id>
              <url>${distribution.releases.url}</url>
          </repository>
          <snapshotRepository>
              <id>${distribution.snapshots.id}</id>
              <url>${distribution.snapshots.url}</url>
          </snapshotRepository>
  </distributionManagement>
</project>

<profiles>...</profiles>

不同環(huán)境的構(gòu)建很可能是不同的暗挑,典型的情況就是數(shù)據(jù)庫的配置窿祥。要想使得一個構(gòu)建不做任何修改就能在任何環(huán)境下運(yùn)行,往往是不可能的嗤瞎,為了能讓構(gòu)建在各個環(huán)境下方便地移植贝奇,Maven 引入了 profile 的概念掉瞳,profile 能夠在構(gòu)建的時候選擇性的激活 pom.xml 中的元素陕习。用戶可以使用很多方式激活 profile该镣,以實(shí)現(xiàn)構(gòu)建在不同環(huán)境下的移植损合。

<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
                     https://maven.apache.org/xsd/maven-4.0.0.xsd">
 ...
 <profiles>
   <profile>
     <id>test</id>
     <activation>...</activation>
     <build>...</build>
     <modules>...</modules>
     <repositories>...</repositories>
     <pluginRepositories>...</pluginRepositories>
     <dependencies>...</dependencies>
     <reporting>...</reporting>
     <dependencyManagement>...</dependencyManagement>
     <distributionManagement>...</distributionManagement>
   </profile>
 </profiles>
</project>

2. 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>
 
  <!-- 項目的全球唯一標(biāo)識符跋炕,通常使用全限定的包名區(qū)分該項目和其他項目辐烂。并且構(gòu)建時生成的路徑也是由此生成棉圈, 如com.seyvoue.demo生成的相對路徑為:/com/seyvoue/demo--> 
  <groupId>com.seyvoue.demo</groupId>
  <!-- 構(gòu)件的標(biāo)識符分瘾,它和 groupId 一起唯一標(biāo)識一個構(gòu)件德召。換句話說上岗,你不能有兩個不同的項目擁有同樣的 artifactId 和 groupId肴掷;在某個特定的 groupId 下呆瞻,artifactId也必須是唯一的痴脾。-->
  <artifactId>demo-maven</artifactId>
  <!-- 項目當(dāng)前版本赞赖,格式為:主版本.次版本.增量版本-限定版本號-->
  <version>1.0.0-SNAPSHOT</version>
  <!-- 項目產(chǎn)生的構(gòu)件類型,例如 jar匿垄、war年堆、pom 等变丧。插件可以創(chuàng)建他們自己的構(gòu)件類型痒蓬,所以前面列的不是全部構(gòu)件類型-->
  <packaging>jar</packaging>
  <!-- 項目的名稱攻晒,Maven產(chǎn)生的文檔用-->     
  <name>project-demo</name>
  <!-- 項目主頁的URL鲁捏,Maven產(chǎn)生的文檔用-->
  <url>http://demo.seyvoue.com</url>
  <!-- 項目的詳細(xì)描述, Maven 產(chǎn)生的文檔用给梅。當(dāng)這個元素能夠用HTML格式描述時(例如动羽,CDATA中的文本會被解析器忽略运吓,就可以包含HTML標(biāo)簽)拘哨, 不鼓勵使用純文本描述宅静。如果你需要修改產(chǎn)生的web站點(diǎn)的索引頁面,你應(yīng)該修改你自己的索引頁文件磷账,而不是調(diào)整這里的文檔逃糟。-->
  <description>A demo of maven project to study maven.</description>
  


  <parent>    
    <!--被繼承的父項目的構(gòu)件標(biāo)識符-->    
    <artifactId/>    
    <!--被繼承的父項目的全球唯一標(biāo)識符-->    
    <groupId/>    
    <!--被繼承的父項目的版本-->    
    <version/>    
    <!-- 父項目的pom.xml文件的相對路徑绰咽。相對路徑允許你選擇一個不同的路徑取募。默認(rèn)值是../pom.xml玩敏。Maven首先在構(gòu)建當(dāng)前項目的地方尋找父項目的pom织阳,其次在文件系統(tǒng)的這個位置(relativePath位置)唧躲,然后在本地倉庫惊窖,最后在遠(yuǎn)程倉庫尋找父項目的pom界酒。-->    
    <relativePath/>    
 </parent>


  <!-- 繼承自該項目的所有子項目的默認(rèn)依賴信息毁欣。這部分的依賴信息不會被立即解析,而是當(dāng)子項目聲明一個依賴(必須描述group ID和 artifact ID信息)凭疮,如果group ID和artifact ID以外的一些信息沒有描述执解,則通過group ID和artifact ID 匹配到這里的依賴,并使用這里的依賴信息千扔。-->    
  <dependencyManagement>    
    <dependencies>    
      <!--參見dependencies/dependency元素-->    
      <dependency>    
      ...    
      </dependency>    
    </dependencies>    
 </dependencyManagement>



  <!--該元素描述了項目相關(guān)的所有依賴伏伐。 這些依賴組成了項目構(gòu)建過程中的一個個環(huán)節(jié)萝风。它們自動從項目定義的倉庫中下載睬塌。要獲取更多信息,請看項目依賴機(jī)制堕花。-->     
  <dependencies>     
    <dependency>    
      <!--依賴的group ID-->    
      <groupId>org.apache.maven</groupId>     
      <!--依賴的artifact ID-->    
      <artifactId>maven-artifact</artifactId>     
      <!--依賴的版本號缘挽。 在Maven 2里, 也可以配置成版本號的范圍壕曼。-->    
      <version>3.8.1</version>     
      <!-- 依賴類型,默認(rèn)類型是jar轧飞。它通常表示依賴的文件的擴(kuò)展名过咬,但也有例外掸绞。一個類型可以被映射成另外一個擴(kuò)展名或分類器衔掸。類型經(jīng)常和使用的打包方式對應(yīng),   這也有例外驱显。一些類型的例子:jar埃疫,war翠桦,ejb-client和test-jar销凑。如果設(shè)置extensions為 true斗幼,就可以在 plugin里定義新的類型蜕窿。所以前面的類型的例子不完整桐经。-->    
      <type>jar</type>    
      <!-- 依賴的分類器阴挣。分類器可以區(qū)分屬于同一個POM,但不同構(gòu)建方式的構(gòu)件盒卸。分類器名被附加到文件名的版本號后面蔽介。例如,如果你想要構(gòu)建兩個單獨(dú)的構(gòu)件成 JAR薇组,一個使用Java    4編譯器律胀,另一個使用Java 6編譯器罪佳,你就可以使用分類器來生成兩個單獨(dú)的JAR構(gòu)件赘艳。-->    
      <classifier></classifier>    
      <!--依賴范圍。在項目發(fā)布過程中掰曾,幫助決定哪些構(gòu)件被包括進(jìn)來婴梧。欲知詳情請參考依賴機(jī)制。    
        - compile :默認(rèn)范圍讶坯,用于編譯      
        - provided:類似于編譯,但支持你期待jdk或者容器提供婉烟,類似于classpath      
        - runtime: 在執(zhí)行時需要使用      
        - test:    用于test任務(wù)時使用      
        - system: 需要外在提供相應(yīng)的元素。通過systemPath來取得      
        - systemPath: 僅用于范圍為system昙衅。提供相應(yīng)的路徑      
        - optional:   當(dāng)項目自身被依賴時,標(biāo)注依賴是否傳遞定鸟。用于連續(xù)依賴時使用-->     
      <scope>test</scope>       
      <!--僅供system范圍使用而涉。注意,不鼓勵使用這個元素联予,并且在新的版本中該元素可能被覆蓋掉啼县。該元素為依賴規(guī)定了文件系統(tǒng)上的路徑材原。需要絕對路徑而不是相對路徑谭羔。推薦使用屬性匹配絕對路徑华糖,例{java.  home}。-->    
      <systemPath></systemPath>     
      <!--當(dāng)計算傳遞依賴時瘟裸, 從依賴構(gòu)件列表里客叉,列出被排除的依賴構(gòu)件集。即告訴maven你只依賴指定的項目话告,不依賴項目的依賴兼搏。此元素主要用于解決版本沖突問題-->    
      <exclusions>    
        <exclusion>     
          <artifactId>spring-core</artifactId>     
          <groupId>org.springframework</groupId>     
        </exclusion>     
      </exclusions>       
      <!--可選依賴,如果你在項目B中把C依賴聲明為可選沙郭,你就需要在依賴于B的項目(例如項目A)中顯式的引用對C的依賴佛呻。可選依賴阻斷依賴的傳遞性病线。-->     
      <optional>true</optional>    
    </dependency>
    ...    
  </dependencies>




  <!--模塊(有時稱作子項目) 被構(gòu)建成項目的一部分吓著。列出的每個模塊元素是指向該模塊的目錄的相對路徑-->
  <modules>  
      <module>account-email</module>  
      <module>account-persist</module> 
      ... 
  </modules>





  <scm>     
      <!--SCM的URL,該URL描述了版本庫和如何連接到版本庫。欲知詳情送挑,請看SCMs提供的URL格式和列表绑莺。該連接只讀。-->     
      <connection>     
          scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)      
      </connection>     
      <!--給開發(fā)者使用的惕耕,類似connection元素纺裁。即該連接不僅僅只讀-->    
      <developerConnection>     
          scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk      
      </developerConnection>    
      <!--當(dāng)前代碼的標(biāo)簽,在開發(fā)階段默認(rèn)為HEAD-->    
      <tag/>           
      <!--指向項目的可瀏覽SCM庫(例如ViewVC或者Fisheye)的URL司澎。-->     
      <url>http://svn.baidu.com/banseon</url>     
  </scm> 
  

  <!--項目分發(fā)信息欺缘,在執(zhí)行mvn deploy后表示要發(fā)布的位置。有了這些信息就可以把網(wǎng)站部署到遠(yuǎn)程服務(wù)器或者把構(gòu)件部署到遠(yuǎn)程倉庫挤安。-->     
  <distributionManagement>    
    <!--部署項目產(chǎn)生的構(gòu)件到遠(yuǎn)程倉庫需要的信息-->    
      <repository>    
        <!--是分配給快照一個唯一的版本號(由時間戳和構(gòu)建流水號)谚殊?還是每次都使用相同的版本號?參見repositories/repository元素-->    
        <uniqueVersion/>    
        <id>banseon-maven2</id>     
        <name>banseon maven2</name>     
          <url>file://${basedir}/target/deploy</url>     
          <layout/>    
      </repository>    
      <!--構(gòu)件的快照部署到哪里蛤铜?如果沒有配置該元素嫩絮,默認(rèn)部署到repository元素配置的倉庫,參見distributionManagement/repository元素-->     
      <snapshotRepository>    
        <uniqueVersion/>    
        <id>banseon-maven2</id>    
          <name>Banseon-maven2 Snapshot Repository</name>    
          <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>     
        <layout/>    
      </snapshotRepository>    
      <!--部署項目的網(wǎng)站需要的信息-->     
      <site>    
    <!--部署位置的唯一標(biāo)識符昂羡,用來匹配站點(diǎn)和settings.xml文件里的配置-->     
        <id>banseon-site</id>     
          <!--部署位置的名稱-->    
          <name>business api website</name>     
          <!--部署位置的URL絮记,按protocol://hostname/path形式-->    
          <url>     
            scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web      
          </url>     
      </site>    
      <!--項目下載頁面的URL。如果沒有該元素虐先,用戶應(yīng)該參考主頁怨愤。使用該元素的原因是:幫助定位那些不在倉庫里的構(gòu)件(由于license限制)。-->    
      <downloadUrl/>    
      <!--如果構(gòu)件有了新的group ID和artifact ID(構(gòu)件移到了新的位置)蛹批,這里列出構(gòu)件的重定位信息撰洗。-->    
      <relocation>    
        <!--構(gòu)件新的group ID-->    
        <groupId/>    
        <!--構(gòu)件新的artifact ID-->    
        <artifactId/>    
        <!--構(gòu)件新的版本號-->    
        <version/>    
        <!--顯示給用戶的篮愉,關(guān)于移動的額外信息,例如原因差导。-->    
        <message/>    
      </relocation>    
      <!-- 給出該構(gòu)件在遠(yuǎn)程倉庫的狀態(tài)试躏。不得在本地項目中設(shè)置該元素,因?yàn)檫@是工具自動更新的设褐。有效的值有:none(默認(rèn))颠蕴,converted(倉庫管理員從 Maven 1  POM轉(zhuǎn)換過來),partner(直接從伙伴Maven 2倉庫同步過來)助析,deployed(從Maven 2實(shí)例部 署)犀被,verified(被核實(shí)時正確的和最終的)。-->    
      <status/>           
  </distributionManagement>

  <build>
    <!--當(dāng)項目沒有規(guī)定目標(biāo)(Maven2 叫做階段)時的默認(rèn)值-->
    <defaultGoal>install</defaultGoal>
    <!--build目標(biāo)文件的存放目錄外冀,默認(rèn)在 ${basedir}/target 目錄-->
    <directory>${basedir}/target</directory>
    <finalName>${artifactId}-${version}</finalName>
    <filters>
      <filter>filters/filter1.properties</filter>
    </filters>

    <!--這個元素描述了項目相關(guān)的所有資源路徑列表寡键,例如和項目相關(guān)的屬性文件,這些資源被包含在最終的打包文件里雪隧。-->    
    <resources>    
      <!--這個元素描述了項目相關(guān)或測試相關(guān)的所有資源路徑-->    
      <resource>    
        <!-- 描述了資源的目標(biāo)路徑西轩。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。舉個例 子脑沿,如果你想資源在特定的包里(   org.apache.maven.message藕畔,你就必須該元素設(shè)置為org/apache/maven /messages。然而捅伤,如果你只是想把資源放到源碼目錄結(jié)構(gòu)里劫流,就不需要該配置巫玻。-->    
        <targetPath/>    
        <!--是否使用參數(shù)值代替參數(shù)名丛忆。參數(shù)值取自properties元素或者文件里配置的屬性,文件在filters元素里列出仍秤。-->    
        <filtering/>    
        <!--描述存放資源的目錄熄诡,該路徑相對POM路徑-->    
        <directory/>    
        <!--包含的模式列表,例如**/*.xml.-->    
        <includes/>    
        <!--排除的模式列表诗力,例如**/*.xml-->    
        <excludes/>    
      </resource>    
    </resources>    
    <!--這個元素描述了單元測試相關(guān)的所有資源路徑凰浮,例如和單元測試相關(guān)的屬性文件。-->    
    <testResources>    
      <!--這個元素描述了測試相關(guān)的所有資源路徑苇本,參見build/resources/resource元素的說明-->    
      <testResource>    
        <targetPath/>
        <filtering/>
        <directory/>
        <includes/>
        <excludes/>    
      </testResource>    
    </testResources>

    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.3</version>
          <configuration>
              <tagBase>${git.conn}</tagBase>
              <branchBase>${git.conn}</branchBase>
              <username>${git.username}</username>
              <password>${git.password}</password>
          </configuration>
      </plugin>
      ...
    </plugins>

    <!--子項目可以引用的默認(rèn)插件信息袜茧。該插件配置項直到被引用時才會被解析或綁定到生命周期。給定插件的任何本地配置都會覆蓋這里的配置-->
    <pluginManagement>
      <plugins>
        ...
      </plugins>
    </pluginManagement>

  </build>

</project>


參考

  1. POM Reference -- Apache Maven Project
  2. pom.xml 詳解 -- adeyi
  3. Maven實(shí)戰(zhàn) -- 許曉斌
  4. dependency 中的 classifier屬性
  5. 利用maven的filter和profile實(shí)現(xiàn)不同環(huán)境使用不同的配制
  6. 使用 maven profile
  7. Maven多環(huán)境配置實(shí)戰(zhàn) filter
  8. Maven Dependency Scope
  9. Maven基本命令 倉庫 坐標(biāo) 依賴 聚合 繼承 pom.xml詳解
  10. Maven pom.xml 配置詳解
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓣窄,一起剝皮案震驚了整個濱河市笛厦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俺夕,老刑警劉巖裳凸,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱鄙,死亡現(xiàn)場離奇詭異,居然都是意外死亡姨谷,警方通過查閱死者的電腦和手機(jī)逗宁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梦湘,“玉大人瞎颗,你說我怎么就攤上這事“埔椋” “怎么了言缤?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禁灼。 經(jīng)常有香客問我管挟,道長,這世上最難降的妖魔是什么弄捕? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任僻孝,我火速辦了婚禮,結(jié)果婚禮上守谓,老公的妹妹穿的比我還像新娘穿铆。我一直安慰自己,他們只是感情好斋荞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布荞雏。 她就那樣靜靜地躺著,像睡著了一般平酿。 火紅的嫁衣襯著肌膚如雪凤优。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天蜈彼,我揣著相機(jī)與錄音筑辨,去河邊找鬼。 笑死幸逆,一個胖子當(dāng)著我的面吹牛棍辕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播还绘,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楚昭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拍顷?” 一聲冷哼從身側(cè)響起抚太,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菇怀,沒想到半個月后凭舶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晌块,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年帅霜,在試婚紗的時候發(fā)現(xiàn)自己被綠了匆背。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡身冀,死狀恐怖钝尸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搂根,我是刑警寧澤珍促,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站剩愧,受9級特大地震影響猪叙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仁卷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一穴翩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锦积,春花似錦芒帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哮幢,卻和暖如春带膀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背家浇。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工本砰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碴裙,地道東北人钢悲。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像舔株,于是被迫代替她去往敵國和親莺琳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理载慈,服務(wù)發(fā)現(xiàn)惭等,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評論 6 342
  • 當(dāng)前秤茅,JVM生態(tài)圈主要的三大構(gòu)建工具: Apache Ant(帶著Ivy) Maven Gradle 對于剛開始接...
    清楓_小天閱讀 5,798評論 1 13
  • 第一次用簡書稚补,希望找到一塊凈土,告別朋友圈說說框喳,找到一塊沒有自己熟識的朋友的土地课幕,來寫寫自己的生活,和不認(rèn)識的朋友...
    田戲戲的喜劇生活閱讀 279評論 0 0
  • 可以通過點(diǎn)擊官方鏈接查看詳細(xì)信息 官方提供的API列表如下: interfaces– Core gensim in...
    Midorra閱讀 2,515評論 0 0