1. 程式人生 > >工程管理(一):maven

工程管理(一):maven

1.setting優先順序
    .m2/setting.xml -> config/setting.xml
2.倉庫優先順序
    local -> nexus -> center
3.pom element
    modelVersion:org.apache.maven/model 超父
    groupId:部門
    artifactId:功能
    version:版本號 SNAPSHOT RELEASE 主版本號.此版本號.增量版本號
    packaging:包(default:jar) jar war pom maven-plugin
    dependencyManagement:
        一般父pom
        統一版本號
        宣告式
        dependencyManagement 下 dependencies 的依賴 子類不會自動載入
    dependency:
        type:default jar
        scope:作用域
            compile default 編譯和打包
            test 編譯和打包
            provided 在編譯和測試的過程有效,最後生成war包時不會加入:servlet
            runtime 在執行的時候依賴,在編譯的時候不依賴  jdbc 驅動
            system 本地一些 jar(pay 對接之類)
4.依賴傳遞
    scope:也會傳遞。
    第一列表示直接依賴的scope,第一行表示間接依賴
                    compile    test    provided   runtime
        compile        compile     -       -          runtime
        test       test       -       -          test
        provided   provided   -       provided   provided
        runtime        runtime        -       -          runtime

    傳遞原則
        最短路徑
        載入先後:dependencies 先後順序
5.生命週期 lifecycle clean pre-clean clean post-clean default test compile package install deploy .. site pre-site site post-site site-deploy 1.A Build Lifecycle is Made Up of Phases 一個生命週期由多個phases組成 2.A Build Phase is Made Up of Plugin Goals 一個phases由多個goals組成 lifecycle:生命週期 phase:可以理解為任務單元 goal: 這是執行任務的最小單元,它可以繫結到任意個phase中,一個phase有一個或多個goal mojo: lifecycle與phase與goal都是概念上的東西,mojo才是做具體事情的,可以簡單理解mojo為goal的實現類
6.命令 compile test mvn package-Dmaven.test.skip=true 打包專案時跳過單元測試 package install deploy 釋出到私服 mvn dependency:list 顯示所有已經解析的所有依賴 mvn dependency:tree > d.text 以樹的結構展示專案中的依賴 mvn dependency:analyze 對專案中的依賴進行分析,依賴未使用,使用單未引入 mvn tomcat:run 啟動tomcat 全域性版本修改 version-maven-plugin mvn version:set -DnewVersion=1.1-SNAPSHOT 強制拉取 mvn clean package -U 7.plugin https://maven.apache.org/plugins/ http://www.mojohaus.org/plugins.html findbugs 靜態程式碼檢查 versions 統一升級版本號 mvn versions:set -DnewVersion=1.1 source 打包原始碼 assembly 打包zip、war tomcat7 8.自定義外掛 https://maven.apache.org/guides/plugin/guide-java-plugin-development.html <packaging>maven-plugin</packaging> extends AbstractMojo mvn install 引數傳遞
 <dependencies>
        <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>
            <scope>provided</scope>
        </dependency>
    </dependencies>
@Mojo(name = "myPlugin",defaultPhase = LifecyclePhase.PACKAGE)
public class MyPlugin extends AbstractMojo {
    @Parameter
    private String msg;


    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("this is my plugin"+msg);
    }
}
<plugin>
                <groupId>com.ermu</groupId>
                <artifactId>maven-plugin</artifactId>
                <version>1.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>myPlugin</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
9.Profile
    使用場景 dev/test/pro
    setting.xml 家和公司兩套
    https://help.sonatype.com/repomanager3/download?_ga=2.107225478.54677454.1546739893-329951149.1546739893
    釋出
<distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>nexus-releases</name>
            <url>http://118.24.21.49:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>nexus-snapshots</name>
            <url>http://118.24.21.49:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>