maven集成命令-U -B -P -e

在持續集成服務器上使用怎樣的 mvn 命令集成項目,這個問題乍一看答案很顯然,不就是 mvn clean install 麼?事實上比較好的集成命令會稍微複雜些,下面是一些總結:spring

不要忘了clean: clean可以保證上一次構建的輸出不會影響到本次構建。
使用deploy而不是install: 構建的SNAPSHOT輸出應當被自動部署到私有Maven倉庫供他人使用,這一點在前面已經詳細論述。
使用-U參數: 該參數能強制讓Maven檢查全部SNAPSHOT依賴更新,確保集成基於最新的狀態,若是沒有該參數,Maven默認以天爲單位檢查更新,而持續集成的頻率應該比這高不少。
使用-e參數:若是構建出現異常,該參數能讓Maven打印完整的stack trace,以方便分析錯誤緣由。
使用-Dmaven.repo.local參數:若是持續集成服務器有不少任務,每一個任務都會使用本地倉庫,下載依賴至本地倉庫,爲了不這種多線程使用本地倉庫可能會引發的衝突,可使用-Dmaven.repo.local=/home/juven/ci/foo-repo/這樣的參數爲每一個任務分配本地倉庫。
使用-B參數:該參數表示讓Maven使用批處理模式構建項目,可以避免一些須要人工參與交互而形成的掛起狀態。shell

綜上,持續集成服務器上的集成命令應該爲 mvn clean deploy -B -e -U -Dmaven.repo.local=xxx 。此外,按期清理持續集成服務器的本地Maven倉庫也是個很好的習慣,這樣能夠避免浪費磁盤資源,幾乎全部的持續集成服務器軟件都支持本地的腳本任務,你能夠寫一行簡單的shell或bat腳本,而後配置以天爲單位自動清理倉庫。須要注意的是,這麼作的前提是你有私有Maven倉庫,不然每次都從Internet下載全部依賴會是一場噩夢。apache

項目開發須要有多個環境,通常爲開發,測試,預發,正式4個環境,經過maven能夠實現按不一樣環境進行打包部署,命令爲: json

mvn package -P dev服務器

其中「dev「爲環境的變量id, 能夠本身定義, 我定義的名稱爲:dev,qa,pre,prod , 具體在pom.xml中的配置以下:多線程

<build>
        <finalName>es-provider</finalName>

        <resources>
            <resource>
                <targetPath>${project.build.directory}/classes</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.json</include>
                </includes>
            </resource>
            <!-- 結合com.alibaba.dubbo.container.Main -->
            <resource>
                <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
                <directory>src/main/resources/context</directory>
                <filtering>true</filtering>
                <includes>
                    <include>applicationContext.xml</include>
                </includes>
            </resource>
        </resources>


        <plugins>
            <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <classesDirectory>target/classes/</classesDirectory>
                    <archive>
                        <manifest>
                            <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                            <!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->
                            <useUniqueVersions>false</useUniqueVersions>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <type>jar</type>
                            <includeTypes>jar</includeTypes>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


    <profiles>
        <profile>
            <id>dev</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources-env/dev</directory>
                        <excludes>
                            <exclude>src/main/resources-env/prod</exclude>
                            <exclude>src/main/resources-env/beta-a</exclude>
                            <exclude>src/main/resources-env/pre</exclude>
                        </excludes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>beta-a</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources-env/beta-a</directory>
                        <excludes>
                            <exclude>src/main/resources-env/prod</exclude>
                            <exclude>src/main/resources-env/dev</exclude>
                            <exclude>src/main/resources-env/pre</exclude>
                        </excludes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>pre</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources-env/pre</directory>
                        <excludes>
                            <exclude>src/main/resources-env/dev</exclude>
                            <exclude>src/main/resources-env/beta-a</exclude>
                            <exclude>src/main/resources-env/prod</exclude>
                        </excludes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources-env/prod</directory>
                        <excludes>
                            <exclude>src/main/resources-env/dev</exclude>
                            <exclude>src/main/resources-env/beta-a</exclude>
                            <exclude>src/main/resources-env/pre</exclude>
                        </excludes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>

 

1.profiles定義了各個環境的變量idapp

2.filters中定義了變量配置文件的地址,其中地址中的環境變量就是上面profile中定義的值maven

3.resources中是定義哪些目錄下的文件會被配置文件中定義的變量替換,通常咱們會把項目的配置文件放在src/main/resources下,像db,bean等,裏面用到的變量在打包時就會根據filter中的變量配置替換成固定值ide

相關文章
相關標籤/搜索