2018.5.3 maven

 1  maven基本概念java

 1.1maven是什麼web

      1)軟件項目管理和理解工具
      2)項目對象模型(Project Object Model,POM)
      3)項目的構建、報告和文檔的中心信息apache

 

1.2maven倉庫api

1.3 pom.xml緩存

    a)groupId:項目或者組織的惟一標誌app

    b)artifactId: 項目的通用名稱框架

    c)version:項目的版本maven

    d)packaging: 打包的機制,如pom, jar, maven-plugin, ejb, war, ear, rar工具

1.4 lifecyclepost

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     複製並處理資源文件,至目標目錄,準備打包。
  • compile     編譯項目的源代碼。
  • process-classes
  • generate-test-sources 
  • process-test-sources 
  • generate-test-resources
  • process-test-resources     複製並處理資源文件,至目標測試目錄。
  • test-compile     編譯測試源代碼。
  • process-test-classes
  • test     使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。
  • prepare-package
  • package     接受編譯好的代碼,打包成可發佈的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     將包安裝至本地倉庫,以讓其它項目依賴。
  • deploy     將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。

 

1.5 經常使用命令

mvn compile

mvn package

mvn install

mvn clean package -DskipTests

 

2  maven插件

2.1簡介

Maven 是一個執行插件的框架,每個任務其實是由插件完成的。Maven 插件一般用於:

  • 建立 jar 文件

  • 建立 war 文件

  • 編譯代碼文件

  • 進行代碼單元測試

  • 建立項目文檔

  • 建立項目報告

一個插件一般提供了一組目標,可以使用如下語法來執行:

mvn [plugin-name]:[goal-name]

例 mvn compile:compile

2.2 插件解析機制

Maven插件的來源:基本全部主要的maven插件都來自於Apache和CodeHaus,與依賴構件同樣,插件構件一樣基於座標存儲在Maven倉庫中。

在須要的時候,Maven會從本地倉庫尋找插件,若是不存在,則從遠程插件倉庫查找。找到插件以後,再下載到本地倉庫使用

maven內置倉庫配置以下,關閉了SNAPSHOT

<pluginRepositories> <pluginRepository> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>

3  maven常見問題及解決思路

3.1 IDEA提示不能解析配置文件(文件已存在)

出現這個問題的緣由在於IDEA沒有識別到該配置文件的路徑,絕大的緣由在於Maven的索引沒有該文件 
- 首先, 必須肯定該資源文件的路徑正確
- 而後, 更新maven的索引:【選擇項目】---【右鍵】---【maven】—【Reimport】

3.2 項目依賴本地jar包(不想install到mvn的repository中),怎麼配置? 

<dependency>

    <groupId>com.dtdream.uim</groupId>
    <artifactId>uim-server-sdk</artifactId>
    <version>1.0.4-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/uim-server-sdk.jar</systemPath>
</dependency>

maven 打包的時候默認是不加入依賴的jar包的,因此若是想打出一個獨立的可運行的包時,須要加入以下plugin(以打war包爲例):

<build>
    <finalName>ipa</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
        <webResources>
          <resource>
          <directory>${project.basedir}/lib</directory>
          <targetPath>WEB-INF/lib</targetPath>
          <filtering>false</filtering>
          <includes>
            <include>**/*.jar</include>
          </includes>
          </resource>
        </webResources>
        </configuration>
        <version>2.1.1</version>
     </plugin>
    </plugins>
</build>

3.3 程序中有些單元測試有錯誤,如何忽略測試步驟

(1) mvn package -DskipTests   不執行測試用例,但編譯測試用例生成相應的class文件至target/test-classes下,能夠在pom 文件中作以下修改:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
      <skipTests>true</skipTests> 
    </configuration> 
</plugin>

(2) mvn package -Dmaven.test.skip=true 不執行測試用例,也不編譯測試用例 ,能夠在pom文件中作以下修改:

<plugin> 
    <groupId>org.apache.maven.plugin</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
      <skip>true</skip> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
        <skip>true</skip> 
    </configuration> 
</plugin>

 

3.4 maven類包衝突

1)找到傳遞依賴的鬼出在哪裏?
mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[version]

2)將不想要的傳遞依賴剪除掉 

假設咱們不但願asm:asm:jar:1.5.3出現,根據分析,咱們知道它是經由org.unitils:unitils-dbmaintainer:jar:3.3引入的,那麼在pom.xml中找到這個依賴,作其它的調整:

<dependency> 
    <groupId>org.unitils</groupId> 
    <artifactId>unitils-dbmaintainer</artifactId> 
<version>${unitils.version}</version> 
  <exclusions> 
    <exclusion> 
      <artifactId>asm</artifactId> 
      <groupId>asm</groupId> 
    </exclusion> 
  </exclusions> 
</dependency>

3)清理IDEA緩存 

前兩個步驟完成以後,還提示有jar包衝突(典型症狀是java.lang.ClassNotFoundException或Method不兼容等異常)。這種狀況一般是由IEDA緩存形成的,建議Reimport一下maven列表就能夠。

 

3.5 項目發佈到遠程倉庫

<distributionManagement>
    <!-- 發佈版本的構件的倉庫 -->
        <repository>
        <id>releases</id>
        <name>Releases</name>
        <url>http://maven.dtdream.com/content/repositories/releases/</url>
        </repository>
<!-- 快照版本的倉庫-->
    <snapshotRepository>
      <id>snapshots</id>
        <name>Snapshots</name>
        <url>http://maven.dtdream.com/content/repositories/snapshots/</url>   </snapshotRepository></distributionManagement>

相關文章
相關標籤/搜索