maven 管理項目實踐指南

來源:互聯網
上載者:User

組織工程 通常採用多模組(module)組織工程。模組劃分原則:樣本:[html]  <modules>      <module>xxx-protocol</module>          <module>xxx-web</module>      <module>xxx-config</module>  </modules>   1. xxx-protocol 是按功能獨立正交性劃分 module2. xxx-web      按部署劃分 module,部署為一個 web 應用3. xxx-config   抽出共用的第三方 module,多個模組需要共用配置 依賴管理 通常統一在父項目中定義所有依賴及其版本。樣本:[html]  <properties>      <project.encoding>utf-8</project.encoding>      <v.plugin.assembly>2.3</v.plugin.assembly>      <v.plugin.compiler>2.5.1</v.plugin.compiler>      <v.plugin.resources>2.6</v.plugin.resources>      <v.plugin.release>2.4</v.plugin.release>      <v.jdk>1.6</v.jdk>        <v.junit>4.8.2</v.junit>      <v.spring>3.1.2.RELEASE</v.spring>  </properties>  如上,統一定義整個項目依賴的 jdk、三方庫、 maven 自身依賴外掛程式的版本。 如下,統一在父 pom 中配置所有的依賴庫和版本父 pom[html]  <dependencyManagement>      <dependencies>         <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-beans</artifactId>              <version>${v.spring}</version>          </dependency>      </dependencies>  </dependencyManagement>   子 pom 中引用,不用指定版本[html] <dependencies>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-beans</artifactId>      </dependency>  </dependencies>   有些項目採用在父 pom 中配置所有依賴,子模組繼承時所有模組都將依賴所有依賴庫,不符合最優最小依賴原則。  發行管理 1. maven 發布 web 類項目   原生支援 packaging 為 war 包方式,不贅述 2. maven 發布非 web 類項目   發布為獨立 java 進程部署啟動   通常採用 maven-assembly-plugin 來打包和組織非 web 類項目   assembly 外掛程式提供了一種比較簡單的 jar-with-dependencies 打包方式,將所有三方依賴打入一個大的 jar 中並指定 main 類做成一個可執行 jar 包。   這種方式有幾個明顯的缺點:       1)第三方 jar 包抽取衝突,比如 spring 3.x 就不支援這種方式,需要把 spring 3.x 的多個 jar 包抽取到一個中時需要通過其他外掛程式配合進行設定檔合并,比較麻煩       2)不便於單獨升級第三方 jar 包      這裡介紹另外一種方式:       1)抽取第三方依賴 jar 包,到獨立 lib 目錄中       2)提取項目設定檔、避免被打入 jar 包中(打入 jar 包中不便於部署和營運時修改)   最終打包完成後的目錄結構如下:   xxxxxxx-version-all/                      |-- bin/                             |-- start.sh                             |-- stop.sh                      |-- lib/                             |-- xxx-1.0.2-jar                      |-- cfg/                             |-- xx.xml                             |-- xx.properties      bin 目錄存放啟動和停止指令碼   lib 目錄存放自身 jar 包和 第三方 jar 包   cfg 目錄存放項目設定檔         配置樣本:   在父 pom 中配置外掛程式管理,如下:[html] <build>      <pluginManagement>          <plugins>               <plugin>                   <artifactId>maven-jar-plugin</artifactId>                   <version>${v.plugin.jar}</version>                   <configuration>                       <excludes>                           <exclude>**/*.properties</exclude>                           <exclude>**/*.xml</exclude>                       </excludes>                   </configuration>                   <executions>                       <phase>package</phase>                       <goals>                                                       <goal>jar</goal>                       </goals>                   </executions>               </plugin>               <plugin>                   <artifactId>maven-assembly-plugin</artifactId>                   <version>${v.plugin.assembly}</version>                   <configuration>                       <descriptors>                           <descriptor>                               src/main/assembly/assembly.xml                           </descriptor>                       </descriptors>                   </configuration>                   <executions>                       <phase>package</phase>                       <goals>                           <goal>assembly</goal>                       </goals>                   </executions>               </plugin>          </plugins>      </pluginManagement>  </build>   需要打包部署為獨立 java 進程的子模組 pom 中配置引用[html]  <build>          <plugins>              <plugin>                  <artifactId > maven-assembly-plugin</artifactId >              </plugin >              <plugin >                  <artifactId]] > maven-jar-plugin</artifactId >              </plugin >          </plugins >      </build >   在 assembly.xml 指定具體的打包方式:[html] <assembly          xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"]] >          <id > all</id >          <formats >              <format > dir</format >  <!-- 其他可選格式 gzip/zip/tar.gz/ -->          </formats >                <includeBaseDirectory > false</includeBaseDirectory >                <dependencySets >              <dependencySet >                  <outputDirectory > /lib</outputDirectory >                  <useProjectArtifact > true</useProjectArtifact >                  <unpack > false</unpack >                  <scope > runtime</scope >              </dependencySet >          </dependencySets >             <fileSets >              <fileSet >                  <directory]] > src/main/scripts</directory >                  <outputDirectory]] > /bin</outputDirectory >              </fileSet >              <fileSet >                  <directory]] > src/main/resources</directory >                  <outputDirectory]] > /cfg</outputDirectory >              </fileSet >          </fileSets >      </assembly >   3. maven 發布共用庫項目    發布一些獨立 jar 包給其他項目使用    此類項目的特點是版本迭代快,版本管理複雜,通常採用 maven-release-plugin 來管理髮布    maven-release-plugin 典型發布過程如下:    1) tag 一個發布版本,並發布到版本管理庫    2) 更新本地所有模組的 pom 檔案中的版本號碼為下一個指定版本    3) 部署 tag 出來的發布版本到私人或公用的中央 maven 倉庫     要完成以上過程,需要在父 pom 做如下的配置:    1)maven-release-plugin 外掛程式配置[html] <build>      <plugins>              <plugin>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-release-plugin</artifactId>              <version > ${v.plugin.release}</version >              <configuration >                  <!-- tag 發布項目的源碼倉庫位置 -->                  <tagBase > http://xxxxxx/tags/xxx</tagBase >                  <useReleaseProfile > false</useReleaseProfile >              </configuration >          </plugin >      </plugins >  </build >    <scm>      <!-- 待發布項目分支路徑 -->      <developerConnection > scm:svn:http://xxxxxxxx/branches/xxx/</developerConnection >  </scm>       2) 自動部署到 maven 倉庫配置 [html]  <distributionManagement >      <snapshotRepository >          <id > repository.snapshots</id >          <name > repository.snapshots</name >          <url > http://xxxxxx/libs-snapshots</url >      </snapshotRepository >      <repository >  www.2cto.com        <id > repository.release</id >          <name > repository.release</name >          <url >http://xxxxxx/libs- releases</url >      </repository >   </distributionManagement >       在 maven 安裝目錄下 conf/settings.xml 中配置倉庫訪問使用者名稱、密碼   [html]  <servers >      <server >          <id >repository.snapshots </id >          <username>xxxx</username >          <password >***** </password >      </server >      <server >          <id > repository.release</id >          <username>xxxx</username >           <password***** > </password >       </server >  </servers >       3) 執行發布,常用發布命令如下[plain]  # 幹跑一次,不改變任何東西    mvn release:prepare -DdryRun=true    # 如果依賴第三方的 snapshot 包,release 會阻止發布,可以增加選項強制發布    mvn release:prepare -DignoreSnapshots=true    # 更新所有模組版本    mvn release:update-versions    # 清理,發布中途若出錯,可以清理後重新發布    mvn release:clean    # 發布準備 互動模式執行  mvn release:prepare    # 發布準備 批量模式執行  mvn --batch-mode release:prepare    # 發布到遠程倉庫  mvn release:perform      一切配置妥當後,通常只需執行如下兩條命令即可完成發布過程   [plain]  mvn release:prepare  mvn release:perform     

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.