maven根據不一樣環境 不一樣配置打包

    1.正確打包

        項目有三種環境:web

        1.本地開發環境(local)數據庫

        2.開發測試環境(dev)apache

        3.線上生產環境(product)api

        不一樣的環境有不一樣的配置,好比數據庫鏈接什麼的....maven打包時默認去resources文件夾下打包這些配置文件,放在WEB-INF/classes下,而後再打成war包,就能用了...如今經過修改pom.xml文件,增長三種配置,讓maven打包時選擇打包不一樣文件夾下的配置文件到WEB-INF/classes下,這樣就省事兒了....服務器

        如圖所示,resources下dev,local,product三個文件夾,分別對應三種環境。jsp

下面是pom.xml主要修改:maven

<!--配置參數-->
<profiles>
    <profile>
        <id>local</id>
        <properties>
            <package.environment>local</package.environment>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>product</id>
        <properties>
            <package.environment>product</package.environment>
        </properties>
    </profile>
    <profile>
        <id>dev</id>
        <properties>
            <package.environment>dev</package.environment>
        </properties>
    </profile>
</profiles> 
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>local/*</exclude>
                <exclude>product/*</exclude>
                <exclude>dev/*</exclude>
            </excludes>
        </resource>
    </resources>
  <!-- war打包插件, 設定war包名稱不帶版本號 -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
            <warSourceExcludes>*/lib/jsp-api-2.2.jar</warSourceExcludes>
            <warName>gcTaobao</warName>
            <webResources>
                <!--動態指定文件-->
                <resource>
                    <directory>src/main/resources/${package.environment}</directory>
                    <targetPath>WEB-INF/classes</targetPath>
                    <filtering>true</filtering>
                </resource>
            </webResources>
        </configuration>
    </plugin>
</build>

1. <profiles>標籤裏的三個<profile>是分別指local , dev ,product 三個參數。ide

2.<resources>標籤裏<excludes>確認在打包時不打包對應三個文件夾以及裏面的文件。測試

3.org.apache.maven.plugins插件<webResources>動態指定參數${package.environment}對應文件夾下的文件到WEB-INF/classes下。ui

到此就配置好了:

下面是maven命令

而後就能夠用mvn -P local package 或者mvn -P install 就能夠打包成功了。

2.jetty本地debug配置

    按照上面的配置,打出的war能夠正確使用,可是在使用maven jetty插件時,jetty自動加載的時target/classes中的文件。你能夠發現使用上面的配置編譯出來的target/classes的文件裏沒有對應的jdbc等文件。這裏的解決方案是更改jetty加載classes路徑來解決。

    具體配置:

<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<properties>
    <artifactId>AAA</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</properties>
<build>
    <!-- 配置加入jetty服務器,開發時咱們通常使用jetty服務器 -->
    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <configuration>
            <!--jetty:run指定加載classes路徑-->
            <classesDirectory>target/${artifactId}-${version}/WEB-INF/classes</classesDirectory>
            <!-- 設置掃描target/classes內部文件變化時間間隔 -->
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <webApp>
                <contextPath>/</contextPath>
            </webApp>
            <stopKey/>
            <stopPort/>
        </configuration>
    </plugin>
</build>

    maven打包時生成 一個 artifactId-version的文件夾,裏面有對應的WEB-INF/classes文件,<classesDirectory>標籤指定jetty加載裏面的classes下文件,裏面有也有對應的配置文件,這樣就能夠正常本地啓動了。

3.idea中的操做

    install直接選擇具體參數,而後點擊install就能夠了,多選參數時,會出現覆蓋的狀況。

    如圖

相關文章
相關標籤/搜索