Maven配置、第三方依賴jar包打包以及Profiles多環境配置


由一次打包部署失敗引發的深入探索┑( ̄▽  ̄)┍

一、Maven配置

1、概覽

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
  <!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>
 
  <!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>
 
  <!-- More Project Information -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>
 
  <!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists>
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

2、基本配置

groupId+artifactId+version:組成項目的唯一定位,當groupId和version是從父級繼承時,則不必顯式定義他們;
packaging:定義打包方式,當前主要的打包方式有pom、 jar、 maven-plugin、 ejb、 war、 ear、 rar,其中jar為默認打包方式;
properties:定義pom常量,pom常量可以在pom文件的任意地方通過${}來引用;

3、構建配置

構建配置分為兩種,"Project Build"和"Profile Build"

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <!-- "Project Build" contains more elements than just the BaseBuild set -->
  <build>...</build>
 
  <profiles>
    <profile>
      <!-- "Profile Build" contains a subset of "Project Build"s elements -->
      <build>...</build>
    </profile>
  </profiles>
</project>

build:定義項目的目錄結構和插件管理;

<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  <filters>
    <filter>filters/filter1.properties</filter>
  </filters>
  ...
</build>

defaultGoal:指定默認的目標或者階段,比如目標可以是jar:jar,階段可以是install,這兩個效果相同;
directory:構建的目標目錄,默認是${basedir}/target;
finalName:項目最終生成的名字,默認是${artifactId}-${version};
filters:定義需要應用的*.properties文件。換句話說就是,在構建時篩選器文件中定義的“name=value”會替換掉資源文件中${name}字符串。Maven的默認篩選器目錄是${basedir}/src/main/filters;
resources:資源列表,描述與項目關聯的文件的內容和位置

  <build>
    ...
    <resources>
      <resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    ...
  </build>

targetPath:定義項目生成后資源文件放置的位置,默認位置是${basedir};
filtering:可選值為true或false,定義是否為此資源啟用篩選。與filters、profile元素結合使用;
directory:定義在哪找到資源文件,默認位置是${basedir}/src/main/resources;
includes:定義directory下需要包含的資源文件,支持*作為通配符匹配文件名;
excludes:結構同includes,定義directory下需要忽略的資源文件,當includes和excludes有沖突時,以excludes為准;

4、環境配置

profiles:根據不同的構建環境更改設置;

<profiles>
    <profile>
      <id>test</id>
      <activation>...</activation>
      <build>...</build>
      <modules>...</modules>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <dependencies>...</dependencies>
      <reporting>...</reporting>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
    </profile>
  </profiles>

activation:描述當前profile激活的條件,當activation里面描述的條件都滿足時,就會激活當前profile;

<profiles>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>sparrow-type</name>
          <value>African</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      ...
    </profile>
  </profiles>

activeByDefault:是否是默認激活;
jdk:運行環境的jdk版本號;
os:運行環境的操作系統的屬性;
file:哪些文件存在或者哪些文件缺失;

二、第三方依賴jar包打包

Maven項目有時候會遇到有第三方依賴打包的情況,如果這個時候不想deploy到Maven庫上,可以這樣做:
打jar包
1、新建一個目錄用於存放第三方依賴,目錄位置看個人喜好,這里新建lib放在項目根目錄下;
2、pom文件中添加依賴;

<dependency>
        <groupId>xx</groupId>
        <artifactId>xx</artifactId>
        <version>2.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/xx-xx-2.0.jar</systemPath>
    </dependency>

3、在pom文件的build元素下添加resource配置,目的是將lib里的第三方依賴打到BOOT-INF/lib/下。這里還需要再配置另一個resource,因為添加前面這個配置后會覆蓋掉默認的resource配置導致項目原本的資源文件沒有打進構建生成的包里;

 <resources>
        <resource>
            <directory>lib</directory>
            <targetPath>BOOT-INF/lib/</targetPath>
            <includes>
                <include>**/*.jar</include>
            </includes>
         </resource>
         <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
    </resources>

打war包
1、2步驟同jar包,3步驟需要這樣修改

<!--設置maven-war-plugins插件 -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <webResources>
                <resource>
                    <directory>lib</directory>
                    <targetPath>WEB-INF/lib/</targetPath>
                    <includes>
                        <include>**/*.jar</include>
                    </includes>
                </resource>
            </webResources>
        </configuration>
    </plugin>

三、Profiles多環境配置

1、新建一個目錄用於存放filter配置文件,這里新建filters目錄,並存在localhost.properties、test.properties、prod.properties三個環境的配置文件。
2、pom文件中添加profiles配置

<profiles>
        <profile>
            <id>localhost</id>
            <properties>
                <profiles.active>localhost</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>
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
    </profiles>

3、pom文件中的build元素下添加配置

<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
            <include>**/*</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>
<filters>
    <filter>${basedir}/filters/${profiles.active}.properties</filter>
</filters>

4、${basedir}/src/main/resources目錄下編寫總配置文件,使用${name}占位符(SpringBoot項目使用@name@占位符)來獲取filters中配置文件對應環境的配置值

參考文章:
https://www.jianshu.com/p/574f74d1d0ee
http://maven.apache.org/pom.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM