maven

Maven

mvn -Dmaven.test.skip=true -U clean installhtml

mvn clean package -U (強制拉一次)java

mvn archetype:create-from-projectlinux

mvn archetype:generate -DarchetypeCatalog=localspring

mvn dependency:tree apache

mvn clean package -Dmaven.test.skip=true -Ptest json

認識Maven

優點

  • 約定優於配置
  • 簡單
  • 測試支持
  • 構建簡單
  • CI
  • 插件豐富

下載

https://maven.apache.org/down...api

安裝

​ maven-model-builder-3.6.0.jar/org/apache/maven/modeltomcat

文件分析

本身的classloaderbash

image-20190307180109552

全部本身的倉庫配置maven

image-20190307180146084

超級父pom

image-20190307180358542

配置 MVM_HOME

  • Windows path
  • Linux .bash_profile

    • export M2_HOME=/Users/xx/tools/apache/apache-maven-3.6.0
  • MAVEN_OPTS

​ 配置setting.xml

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>osc</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>

image-20190306182433849

Pom

groupId

​ 通常是域名反寫

com.zzjson

artfactId

​ 功能命名

version

​ 版本號

packaging

​ 打包方式 默認是jar

dependencyManagement

​ 只能出如今父pom

​ 統一版本號

​ 聲明 (子POM裏用到再引)

Dependency

​ Type 默認jar

scope

compile

​ 默認

​ 編譯(maven編譯整個項目)

​ 例如spring-core

test

​ 測試

provided

​ 編譯 例如 servlet,tomcat已經有了

​ 打包不會打進去,至關於compile可是在打包階段作了exclude操做

runtime

​ 運行時 例如JDBC驅動實現

system

​ 本地一些jar 例如短信jar

依賴傳遞

compile:編譯依賴範圍,在編譯,測試,運行時都須要。

test: 測試依賴範圍,測試時須要。編譯和運行不須要。如Junit

runtime: 運行時依賴範圍,測試和運行時須要。編譯不須要。如JDBC驅動包

provided:已提供依賴範圍,編譯和測試時須要。運行時不須要。如servlet-api

system:系統依賴範圍。本地依賴,不在maven中央倉庫。

第一列表示直接依賴的scope,第一行表示間接依賴的scope

compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

依賴仲裁

mvn dependency:tree

若是都定義了版本,那麼以最近的爲準

​ 最短路徑原則

​ 加載前後原則

exclusions

​ 排除包

生命週期

  • clean 清理項目

    • pre-clean執行一些清理前須要完成的工做
    • clean清理上一次構建生成的文件
    • post-clean執行一些清理後須要完成的工做
  • default
  • Site

​ lifecycle/phase/goal

​ 1.A Build Lifecycle is Made Up of Phases

​ 一個生命週期由多個phase組成的

​ 2.A Build Phase is Made Up of Plugin Goals

​ 一個phases是由多個goals組成的

生命週期運行會從前日後

image-20190307175004834

image-20190307174518749

image-20190307174012501

版本管理

1.0-SNAPSHOT

​ i. repository 刪除

​ ii. mvn clean package -U (強制拉一次)

主版本號.次版本號.增量版本號-<里程碑版本>

1.0.0-RELAESE

經常使用命令

  • compile
  • clean 刪除target/
  • test test case junit/testNG
  • package 打包

    image-20190307100931327

  • <plugins>
         <plugin>
             <artifactId>plugin</artifactId>
             <groupId>com.zzjson</groupId>
             <version>1.1</version>
             <configuration>
                 <msg>
                     ddd
                 </msg>
                 <list>
                     <list>
                         d
                     </list>
                     <list>
                         d1
                     </list>
                 </list>
             </configuration>
             <executions>
                 <execution>
                     <phase>package</phase>
                     <goals>
                         <goal>myplugin</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>
     </plugins>
  • install 把項目install到local repo
  • deploy 發本地jar發佈到remote

插件

經常使用插件

versions 統一升級版本號

  • <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.3</version>
    </plugin>
    http://www.mojohaus.org/versions-maven-plugin/index.html

    mvn versions:set -DnewVersion=1.1-SNAPSHOT

source 打包源代碼

  • <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <id>attach-sources</id>
                <phase>install</phase>
                <goals>
                    <goal>jar-no-fork</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

assembly 打包zip、war

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>shuncom.dubbo.task.main.BootStrap</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>jar-with-dependencies</descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

tomcat7

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>8080</port>
        <path>/</path>
    </configuration>
</plugin>

自定義插件

https://maven.apache.org/guides/plugin/guide-java-plugin-development.html

<packaging>maven-plugin</packaging>

導入依賴

<dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.5</version>
        </dependency>

extends AbstractMojo

mvn install

參數傳遞

​ Profile

使用場景 dev/test/pro

setting.xml 家和公司兩套

倉庫

下載

http://books.sonatype.com/nex...

訪問地址

http://lohost:8081/nexus(自帶jetty)

admin/admin123

內容配置

Type:

​ 依賴jar包的方式

group

​ 把group做爲合集提供,挨個jar去倉庫查找

hosted

​ 本地的

​ 三方的

​ 阿里短信jar包

​ released

​ snapshosts

proxy

​ 當maven dependce本地倉庫沒有找到,私服也沒有,則去下載,從遠端下載到私服

發佈

在pom.xml配置

<distributionManagement>
    <repository>
        <id>repo-mirrors</id>
        <name>center-repository</name>
        <url>http://uk.maven.org/maven2</url>
    </repository>
    <snapshotRepository>
        <id>repo-mirrors</id>
        <name>center-repository</name>
        <url>http://uk.maven.org/maven2</url>
    </snapshotRepository>
</distributionManagement>

mvn deploy

登陸

​ 也須要驗證用戶名密碼,id須要和pom中一致

image-20190307175342194

下載jar配置

  • 配置mirror
  • Profile

archetype 模版化

生成一個archetype

mvn archetype:create-from-project

進入目錄

cd /target/generated-sources/archetype

mvn install

b) 從archetype建立項目

mvn archetype:generate -DarchetypeCatalog=local

Profile

配置文件

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
</profiles>
<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
            <exclude>conf/**</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources/conf/${profiles.active}</directory>
    </resource>
</resources>

代碼,指定不一樣的環境

image-20181228232224889

Setting.xml

image-20190307175440878

<profile>
    <id>ali</id>
    <repositories>
        <repository>
            <id>nexus</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <checksumPolicy>fail</checksumPolicy>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>
<profile>
    <id>external</id>
    <repositories>
        <repository>
            <id>repo-mirrors</id>
            <url>http://uk.maven.org/maven2</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>plugin-repo-mirror</id>
            <url>http://uk.maven.org/maven2</url>
        </pluginRepository>
    </pluginRepositories>
</profile>

mvn clean package -Dmaven.test.skip=true -Ptest

倉庫

[root@snails ~]# wget http://download.sonatype.com/nexus/3/latest-unix.tar.gz

dependencyManagement使用可以幫助咱們進行子項目的版本號管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.zzjson.dubbo.order</groupId>
            <artifactId>order-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

版本

SNAPSHOT

​ 版本會替換倉庫中的jar

release

​ 版本不會替換

相關文章
相關標籤/搜索