Maven 深入profiles和mirrors標簽

一、profiles標簽

在 Maven 的 settings.xml 文件中,<profiles> 元素用于定義一組可重用的配置片段,這些配置可以根據不同的環境或需求動態啟用或切換。它類似于 pom.xml 中的 <profiles>,但作用域是全局的(影響整個 Maven 的行為),而不是針對單個項目。


1.1 <profiles> 的核心作用

  1. 環境隔離
    定義不同環境(如開發、測試、生產)的配置,例如:
    • 不同的鏡像倉庫地址
    • 不同的服務器認證信息
    • 不同的插件配置
  2. 動態激活
    通過條件(如 JDK 版本、操作系統、命令行參數)自動激活某個配置。
  3. 簡化復雜配置
    將重復或環境相關的配置抽取為獨立的 Profile,避免冗余。

1.2 配置示例

以下是一個典型的 settings.xml 中的 profiles 配置:

<settings>
  <profiles>
    <!-- 開發環境配置 -->
    <profile>
      <id>dev</id>
      <properties>
        <env>development</env>
      </properties>
      <repositories>
        <repository>
          <id>dev-repo</id>
          <url>http://dev.nexus:8081/repository/maven-public/</url>
        </repository>
      </repositories>
    </profile>

    <!-- 生產環境配置 -->
    <profile>
      <id>prod</id>
      <properties>
        <env>production</env>
      </properties>
      <repositories>
        <repository>
          <id>prod-repo</id>
          <url>http://prod.nexus:8081/repository/maven-public/</url>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <!-- 默認激活的 profile -->
  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>
</settings>

1.3 關鍵配置項

  1. <id>
    Profile 的唯一標識符,通過 activeProfiles 或命令行參數激活。

  2. <repositories> / <pluginRepositories>
    定義不同環境下的倉庫地址。

  3. <properties>
    定義環境變量,供 pom.xml 或其他配置引用(如 ${env})。

  4. <activation>
    自動激活條件(可選):

    <profile>
      <id>auto-activate</id>
      <activation>
        <jdk>11</jdk> <!-- 當 JDK 版本為 11 時自動激活 -->
        <os>
          <family>windows</family> <!-- 當操作系統是 Windows 時激活 -->
        </os>
      </activation>
    </profile>
    

1.4 如何激活 Profile?

  1. settings.xml 中直接指定
    通過 <activeProfiles> 指定默認激活的 Profile:

    <activeProfiles>
      <activeProfile>dev</activeProfile>
    </activeProfiles>
    
  2. 通過命令行參數激活
    使用 -P 參數指定 Profile ID:

    mvn clean install -Pprod
    
  3. 通過條件自動激活
    如果 Profile 中配置了 <activation> 條件(如 JDK 版本、系統屬性等),滿足條件時會自動激活。


1.5 常見場景

  1. 多環境倉庫切換
    開發環境使用內部 Nexus 倉庫,生產環境使用公共 Maven 中央倉庫:

    <profile>
      <id>dev</id>
      <repositories>
        <repository>
          <id>internal</id>
          <url>http://internal-nexus/repo</url>
        </repository>
      </repositories>
    </profile>
    
    <profile>
      <id>prod</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
      </repositories>
    </profile>
    
  2. 動態切換鏡像
    根據環境選擇不同的鏡像加速下載:

    <profile>
      <id>aliyun-mirror</id>
      <mirrors>
        <mirror>
          <id>aliyun</id>
          <mirrorOf>*</mirrorOf>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
      </mirrors>
    </profile>
    

1.6 pom.xml 中的 profiles 區別

特性 settings.xml 的 profiles pom.xml 的 profiles
作用域 全局生效(所有項目) 僅對當前項目生效
典型用途 配置倉庫、鏡像、全局屬性 配置插件、依賴、構建參數等
優先級 低(會被項目配置覆蓋)

1.7 注意事項

  1. ID 唯一性
    不同 Profile 的 <id> 必須唯一,否則可能導致沖突。

  2. pom.xml 的聯動
    settings.xml 中的 Profile 可以通過 <properties> 傳遞值到 pom.xml,例如:

    <!-- settings.xml -->
    <properties>
      <custom.property>value</custom.property>
    </properties>
    
    <!-- pom.xml -->
    <echo>${custom.property}</echo>
    
  3. 安全性
    避免在 settings.xml 中明文存儲敏感信息(如密碼),建議使用加密的 settings-security.xml


通過合理使用 profiles,可以實現 Maven 配置的環境隔離和靈活切換,大幅提升多環境開發的效率。

二、mirrors標簽

profilesmirrors 是兩個不同但密切相關的概念,它們共同作用于依賴管理和構建配置。以下是它們的核心區別和協作關系:


2.1 核心區別

概念 作用 配置位置
profiles 定義一組可激活的配置片段(如倉庫地址、插件配置、環境變量等)。 settings.xmlpom.xml
mirrors 定義倉庫的鏡像地址,用于替代默認的中央倉庫或其他遠程倉庫的訪問地址。 settings.xmlpom.xml

2.2 協作關系

(1) mirrors 可以在 profiles 中動態配置

  • 場景:不同環境下使用不同的鏡像源(例如開發環境用阿里云鏡像,生產環境用內部鏡像)。
  • 實現方式:在 profiles 中定義 mirrors,通過激活不同的 profile 切換鏡像源。

示例(在 settings.xml 中配置):

<settings>
  <profiles>
    <!-- 開發環境鏡像 -->
    <profile>
      <id>aliyun-dev</id>
      <mirrors>
        <mirror>
          <id>aliyun</id>
          <mirrorOf>*</mirrorOf>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
      </mirrors>
    </profile>

    <!-- 生產環境鏡像 -->
    <profile>
      <id>internal-prod</id>
      <mirrors>
        <mirror>
          <id>internal</id>
          <mirrorOf>*</mirrorOf>
          <url>http://internal-nexus/repository/maven-public/</url>
        </mirror>
      </mirrors>
    </profile>
  </profiles>

  <!-- 默認激活開發環境 -->
  <activeProfiles>
    <activeProfile>aliyun-dev</activeProfile>
  </activeProfiles>
</settings>
  • 效果:運行 mvn clean install 時默認使用阿里云鏡像;若需切換到生產鏡像,執行 mvn clean install -Pinternal-prod

(2) mirrors 也可以獨立于 profiles 配置

  • 場景:全局固定鏡像(如公司內部強制使用特定鏡像)。
  • 實現方式:直接在 settings.xml 的頂層配置 mirrors,無需綁定 profile

示例

<settings>
  <mirrors>
    <mirror>
      <id>company-mirror</id>
      <mirrorOf>*</mirrorOf>
      <url>http://company-nexus/repository/maven-public/</url>
    </mirror>
  </mirrors>
</settings>
  • 效果:所有 Maven 構建默認使用公司鏡像,無法動態切換。

2.3 關鍵區別總結

特性 mirrors profiles
用途 替代默認倉庫地址,加速依賴下載。 定義環境相關的完整配置(倉庫、插件、屬性等)。
動態性 依賴 profiles 的激活才能動態切換。 可獨立配置,也可通過 activeProfiles 動態激活。
配置范圍 通常用于全局鏡像替換。 支持環境隔離(開發、測試、生產等)。

2.4 典型協作場景

場景 1:多環境倉庫 + 鏡像

  • 目標:開發環境使用阿里云鏡像,測試環境使用內部 Nexus 鏡像,生產環境直連中央倉庫。

  • 實現:

    <!-- settings.xml -->
    <profiles>
      <profile>
        <id>dev</id>
        <mirrors>
          <mirror>
            <id>aliyun</id>
            <mirrorOf>*</mirrorOf>
            <url>https://maven.aliyun.com/repository/public</url>
          </mirror>
        </mirrors>
      </profile>
    
      <profile>
        <id>test</id>
        <mirrors>
          <mirror>
            <id>nexus-test</id>
            <mirrorOf>*</mirrorOf>
            <url>http://test-nexus/repository/maven-public/</url>
          </mirror>
        </mirrors>
      </profile>
    </profiles>
    

場景 2:按 JDK 版本切換鏡像

  • 目標:JDK 8 使用阿里云鏡像,JDK 11 使用華為云鏡像。

  • 實現:

    <profile>
      <id>jdk8</id>
      <activation>
        <jdk>1.8</jdk>
      </activation>
      <mirrors>
        <mirror>
          <id>aliyun-jdk8</id>
          <mirrorOf>*</mirrorOf>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
      </mirrors>
    </profile>
    
    <profile>
      <id>jdk11</id>
      <activation>
        <jdk>11</jdk>
      </activation>
      <mirrors>
        <mirror>
          <id>huawei-jdk11</id>
          <mirrorOf>*</mirrorOf>
          <url>https://repo.huaweicloud.com/repository/maven/</url>
        </mirror>
      </mirrors>
    </profile>
    

2.5 注意事項

  1. 優先級問題
    • 如果同時存在全局 mirrorsprofile 中的 mirrorsprofile 中的配置會覆蓋全局配置(需激活對應的 profile)。
    • mirrorOf 的匹配規則需謹慎配置(例如 * 會覆蓋所有倉庫請求)。
  2. 鏡像與倉庫的綁定
    • 如果某個倉庫在 pom.xml 中顯式聲明(如私有倉庫),且未在 mirrors 中排除,則鏡像不會生效。需通過 <mirrorOf>!repo-id</mirrorOf> 排除特定倉庫。
  3. 安全性
    • 避免在 mirrors 中硬編碼敏感地址,建議通過環境變量或加密配置管理。

2.6 總結

  • mirrors 是倉庫的代理規則,決定依賴從哪里下載。
  • profiles 是環境配置的容器,可包含 mirrors、倉庫地址、插件配置等。
  • 協作核心:通過激活不同的 profile,動態切換 mirrors 和其他環境相關配置,實現多環境構建的靈活性。

三、mirrorOf標簽

mirrorOf<mirror> 元素的核心屬性,用于定義該鏡像替代哪些遠程倉庫的請求。它決定了當 Maven 需要從某個倉庫下載依賴時,是否使用當前配置的鏡像地址。


3.1 mirrorOf 的作用

  • 匹配規則:通過 mirrorOf 指定哪些倉庫的請求會被當前鏡像攔截并重定向到鏡像地址。
  • 靈活控制:可以為不同的倉庫配置不同的鏡像,或讓某個鏡像覆蓋多個倉庫。

3.2 mirrorOf 的常見配置值

含義 示例
* 匹配所有倉庫請求(全局鏡像)。 <mirrorOf>*</mirrorOf>:所有依賴下載都走該鏡像。
external:* 匹配所有遠程倉庫(排除本地倉庫)。 <mirrorOf>external:*</mirrorOf>:僅代理遠程倉庫,不影響本地倉庫(file://)。
repo-id 匹配指定 ID 的倉庫(需與倉庫的 <id> 一致)。 <mirrorOf>central</mirrorOf>:僅代理 Maven 中央倉庫(ID 為 central)。
!repo-id 排除指定 ID 的倉庫(不代理該倉庫)。 <mirrorOf>*,!private-repo</mirrorOf>:代理所有倉庫,但排除 ID 為 private-repo 的倉庫。
external:*,!repo-id 匹配所有遠程倉庫,但排除指定 ID 的倉庫。 <mirrorOf>external:*,!company-repo</mirrorOf>:代理外部倉庫,但公司內部倉庫直連。

3.3 配置示例

場景 1:全局鏡像(所有請求走鏡像)

<mirror>
  <id>aliyun-mirror</id>
  <mirrorOf>*</mirrorOf> <!-- 所有倉庫請求都走阿里云鏡像 -->
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
  • 效果:無論項目依賴來自哪個倉庫(如 Maven 中央倉庫、JCenter 等),都會通過阿里云鏡像下載。

場景 2:僅代理特定倉庫

<mirror>
  <id>nexus-releases</id>
  <mirrorOf>nexus-releases</mirrorOf> <!-- 僅代理 ID 為 nexus-releases 的倉庫 -->
  <url>http://your-nexus-server:8081/repository/maven-releases/</url>
</mirror>
  • 效果:只有當項目需要從 nexus-releases 倉庫下載依賴時,才會使用該鏡像。

場景 3:排除特定倉庫

<mirror>
  <id>external-mirror</id>
  <mirrorOf>external:*</mirrorOf> <!-- 代理所有遠程倉庫,但排除本地倉庫 -->
  <url>http://external-proxy-repo/</url>
</mirror>
  • 效果:所有遠程倉庫(非本地文件倉庫)的請求都通過 external-mirror 下載。

場景 4:組合排除

<mirror>
  <id>custom-mirror</id>
  <mirrorOf>*,!company-repo,!maven-central</mirrorOf> <!-- 代理所有倉庫,但排除 company-repo 和 maven-central -->
  <url>http://custom-proxy/</url>
</mirror>
  • 效果:僅代理非 company-repo 和非 maven-central 的倉庫請求。

3.4關鍵注意事項

  1. 倉庫 ID 必須匹配
    mirrorOf 的值必須與目標倉庫的 <id> 一致。例如,Maven 中央倉庫的默認 ID 是 central,如果鏡像配置的 mirrorOfcentral,則只會代理該倉庫的請求。
  2. 優先級問題
    • 如果多個鏡像的 mirrorOf 規則匹配同一個倉庫,Maven 會按配置順序選擇第一個匹配的鏡像。
    • 建議在 settings.xml 中按具體性排序(從精確到寬泛)。
  3. 本地倉庫不受影響
    mirrorOf 默認不會匹配本地倉庫(file://path/to/repo),除非顯式配置 mirrorOf=*
  4. pom.xml 中倉庫的聯動
    如果項目 pom.xml 中顯式聲明了私有倉庫(如 <repository>),且未在鏡像中排除,Maven 仍會嘗試通過鏡像訪問該倉庫。

3.5 常見問題

1. 為什么配置了鏡像后依賴無法下載?

  • 原因mirrorOf 規則可能覆蓋了私有倉庫,導致請求被錯誤重定向。

  • 解決:在鏡像配置中排除私有倉庫的 ID,例如:

    <mirrorOf>*,!my-private-repo</mirrorOf>
    

2. 如何讓鏡像僅代理外部倉庫?

  • 配置:使用external:*匹配所有遠程倉庫:

    <mirrorOf>external:*</mirrorOf>
    

3. 如何為不同環境配置不同的鏡像?

  • 結合 profiles:在不同profile中配置不同的鏡像,并通過-P 參數激活:

    <profile>
      <id>dev</id>
      <mirrors>
        <mirror>
          <id>dev-mirror</id>
          <mirrorOf>*</mirrorOf>
          <url>http://dev-mirror/</url>
        </mirror>
      </mirrors>
    </profile>
    

3.6 總結

  • mirrorOf 是 Maven 鏡像規則的核心,用于精確控制哪些倉庫請求會被代理
  • 通過靈活配置mirrorOf,可以實現:
    • 全局鏡像加速依賴下載。
    • 按倉庫 ID 精準控制代理范圍。
    • 排除敏感或私有倉庫的代理。
  • 最佳實踐:結合 profiles 實現多環境鏡像切換,避免全局配置沖突。

四、倉庫 ID

倉庫 ID(Repository ID) 是用于唯一標識一個倉庫的字符串,通常需要在配置文件中顯式定義。它的作用包括:

  1. 唯一性:區分不同的倉庫(如 Maven 中央倉庫、私有倉庫、快照倉庫等)。
  2. 關聯配置:在 settings.xml 中配置服務器認證時,需要通過倉庫 ID 綁定用戶名和密碼。
  3. 依賴解析:在 pom.xml 或鏡像配置中,通過倉庫 ID 指定依賴下載或鏡像的來源。

4.1 倉庫 ID 的定義場景

  1. pom.xml 中定義倉庫(分發管理)

當項目需要發布構建產物(Artifact)到私有倉庫時,需要在 pom.xml<distributionManagement> 中定義倉庫 ID。

<project>
  ...
  <distributionManagement>
    <!-- 正式版本倉庫 -->
    <repository>
      <id>nexus-releases</id> <!-- 倉庫的唯一 ID -->
      <url>http://your-nexus-server:8081/repository/maven-releases/</url>
    </repository>
    <!-- 快照版本倉庫 -->
    <snapshotRepository>
      <id>nexus-snapshots</id> <!-- 快照倉庫的唯一 ID -->
      <url>http://your-nexus-server:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
  ...
</project>
  • 關鍵點:
    • id 是倉庫的唯一標識符,需與 settings.xml 中的 <server>id 一致。
    • 示例中定義了兩個倉庫:nexus-releases(正式版)和 nexus-snapshots(快照版)。

  1. settings.xml 中配置認證信息

~/.m2/settings.xml 中,通過 <server> 元素為倉庫配置認證信息,id 必須與 pom.xml 中的倉庫 ID 一致。

<settings>
  <servers>
    <!-- 正式版倉庫的認證 -->
    <server>
      <id>nexus-releases</id> <!-- 必須與 pom.xml 中的 repository.id 一致 -->
      <username>admin</username>
      <password>admin123</password>
    </server>
    <!-- 快照版倉庫的認證 -->
    <server>
      <id>nexus-snapshots</id> <!-- 必須與 pom.xml 中的 snapshotRepository.id 一致 -->
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>
</settings>

  1. 在 Nexus/Artifactory 中創建倉庫時定義 ID

如果你使用 Nexus 或 Artifactory 等倉庫管理工具,創建倉庫時會直接指定倉庫 ID:

  • Nexus 示例:
    • 訪問 Nexus 管理界面 → 創建 Hosted Repository → 填寫 Repository ID(如 maven-releases)。
    • 此 ID 會用于 Maven 的配置文件中。

4.2 倉庫 ID 的命名規范

  1. 唯一性:確保每個倉庫的 ID 在項目中唯一。
  2. 語義化:建議使用有意義的名稱,例如:
    • nexus-releases:存放正式發布的版本。
    • nexus-snapshots:存放快照版本。
    • aliyun-mirror:阿里云鏡像倉庫。
  3. 避免特殊字符:建議僅使用字母、數字和下劃線。

4.3 倉庫 ID 的常見應用場景

  1. 配置鏡像(Mirrors)

settings.xml 中配置鏡像時,通過 mirrorOf 指定需要代理的倉庫 ID:

<mirrors>
  <mirror>
    <id>aliyun-mirror</id>
    <mirrorOf>nexus-releases,nexus-snapshots</mirrorOf> <!-- 代理這兩個倉庫的請求 -->
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>
  1. 配置插件倉庫

如果插件需要從私有倉庫下載,需在 pom.xml 中定義插件倉庫的 ID:

<project>
  ...
  <pluginRepositories>
    <pluginRepository>
      <id>nexus-plugins</id> <!-- 插件倉庫的 ID -->
      <url>http://your-nexus-server:8081/repository/maven-plugins/</url>
    </pluginRepository>
  </pluginRepositories>
  ...
</project>
  1. 配置代理倉庫

在 Nexus 中配置代理倉庫時,也需要指定 ID:

<!-- 代理 Maven 中央倉庫 -->
<mirror>
  <id>central-proxy</id>
  <mirrorOf>central</mirrorOf>
  <url>http://central-proxy-url</url>
</mirror>

4.4 常見錯誤及解決方法

  1. 401 Unauthorized 錯誤
    • 原因settings.xml 中的 server.idpom.xml 中的倉庫 id 不一致。
    • 解決:檢查兩者的 id 是否完全一致(包括大小寫)。
  2. 依賴無法解析
    • 原因:鏡像的 mirrorOf 規則未覆蓋目標倉庫的 ID。
    • 解決:確保鏡像的 mirrorOf 包含目標倉庫的 ID,或通過 * 匹配所有倉庫。
  3. 快照/正式版本混淆
    • 原因:發布快照版本時使用了 nexus-releases 的 ID。
    • 解決:確保 snapshotRepositoryid 對應快照倉庫。

4.5 總結

  • 倉庫 ID 的定義:在 pom.xml(分發管理)、settings.xml(服務器認證)或倉庫管理工具(如 Nexus)中顯式指定。
  • 核心原則id 必須全局唯一,且在相關配置文件中保持一致。
  • 最佳實踐:
    • 使用清晰的語義命名(如 nexus-releases)。
    • settings.xml 中集中管理認證信息,避免硬編碼密碼。
    • 通過 mirrorOf 靈活控制鏡像的代理范圍。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • 一、簡介 Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。...
    張文斌_2020閱讀 655評論 0 0
  • 在 Maven 的術語中,倉庫是一個位置(place)。Maven 倉庫是項目中依賴的第三方庫,這個庫所在的位置叫...
    41uLove閱讀 7,093評論 2 3
  • 步驟 1:下載和安裝Maven 前往Apache Maven的官方下載頁面:https://maven.apach...
    米樂淘閱讀 1,106評論 0 0
  • Maven系列文集 三、Maven安裝配置 1、下載 官方下載下載解壓即可。在安裝 Maven 之前,注意:需確保...
    唯老閱讀 1,071評論 0 0
  • 想了解Linux安裝Nexus3可以看官方文檔,這里說一下docker的方式如何安裝配置。 安裝Nexus 搜索n...
    AbelEthan閱讀 582評論 0 1