Maven配置、第三方依賴jar包打包以及Profiles多環(huán)境配置

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

一修赞、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:組成項(xiàng)目的唯一定位,當(dāng)groupId和version是從父級繼承時(shí)勾邦,則不必顯式定義他們蚣录;
packaging:定義打包方式,當(dāng)前主要的打包方式有pom眷篇、 jar萎河、 maven-plugin、 ejb铅歼、 war公壤、 ear换可、 rar椎椰,其中jar為默認(rèn)打包方式;
properties:定義pom常量沾鳄,pom常量可以在pom文件的任意地方通過${}來引用慨飘;

3、構(gòu)建配置

構(gòu)建配置分為兩種译荞,"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:定義項(xiàng)目的目錄結(jié)構(gòu)和插件管理瓤的;

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

defaultGoal:指定默認(rèn)的目標(biāo)或者階段,比如目標(biāo)可以是jar:jar吞歼,階段可以是install圈膏,這兩個(gè)效果相同;
directory:構(gòu)建的目標(biāo)目錄篙骡,默認(rèn)是${basedir}/target稽坤;
finalName:項(xiàng)目最終生成的名字,默認(rèn)是${artifactId}-${version}糯俗;
filters:定義需要應(yīng)用的*.properties文件尿褪。換句話說就是,在構(gòu)建時(shí)篩選器文件中定義的“name=value”會替換掉資源文件中${name}字符串得湘。Maven的默認(rèn)篩選器目錄是${basedir}/src/main/filters杖玲;
resources:資源列表,描述與項(xiàng)目關(guān)聯(lián)的文件的內(nèi)容和位置

  <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:定義項(xiàng)目生成后資源文件放置的位置淘正,默認(rèn)位置是${basedir}摆马;
filtering:可選值為true或false,定義是否為此資源啟用篩選鸿吆。與filters囤采、profile元素結(jié)合使用;
directory:定義在哪找到資源文件伞剑,默認(rèn)位置是${basedir}/src/main/resources斑唬;
includes:定義directory下需要包含的資源文件,支持*作為通配符匹配文件名;
excludes:結(jié)構(gòu)同includes恕刘,定義directory下需要忽略的資源文件缤谎,當(dāng)includes和excludes有沖突時(shí),以excludes為準(zhǔn)褐着;

4坷澡、環(huán)境配置

profiles:根據(jù)不同的構(gòu)建環(huán)境更改設(shè)置;

<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:描述當(dāng)前profile激活的條件含蓉,當(dāng)activation里面描述的條件都滿足時(shí)频敛,就會激活當(dāng)前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:是否是默認(rèn)激活馅扣;
jdk:運(yùn)行環(huán)境的jdk版本號斟赚;
os:運(yùn)行環(huán)境的操作系統(tǒng)的屬性;
file:哪些文件存在或者哪些文件缺失差油;

二拗军、第三方依賴jar包打包

Maven項(xiàng)目有時(shí)候會遇到有第三方依賴打包的情況,如果這個(gè)時(shí)候不想deploy到Maven庫上蓄喇,可以這樣做:
打jar包
1发侵、新建一個(gè)目錄用于存放第三方依賴,目錄位置看個(gè)人喜好妆偏,這里新建lib放在項(xiàng)目根目錄下刃鳄;
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/下罐柳。這里還需要再配置另一個(gè)resource掌腰,因?yàn)樘砑忧懊孢@個(gè)配置后會覆蓋掉默認(rèn)的resource配置導(dǎo)致項(xiàng)目原本的資源文件沒有打進(jìn)構(gòu)建生成的包里;

 <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步驟需要這樣修改

<!--設(shè)置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多環(huán)境配置

1肮蛹、新建一個(gè)目錄用于存放filter配置文件勺择,這里新建filters目錄,并存在localhost.properties伦忠、test.properties省核、prod.properties三個(gè)環(huán)境的配置文件。
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項(xiàng)目使用@name@占位符)來獲取filters中配置文件對應(yīng)環(huán)境的配置值

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旧噪,一起剝皮案震驚了整個(gè)濱河市吨娜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淘钟,老刑警劉巖宦赠,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異米母,居然都是意外死亡勾扭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門铁瞒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妙色,“玉大人,你說我怎么就攤上這事精拟×钦叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵蜂绎,是天一觀的道長。 經(jīng)常有香客問我笋鄙,道長师枣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任萧落,我火速辦了婚禮践美,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘找岖。我一直安慰自己陨倡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布许布。 她就那樣靜靜地躺著兴革,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜜唾。 梳的紋絲不亂的頭發(fā)上杂曲,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音袁余,去河邊找鬼擎勘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颖榜,可吹牛的內(nèi)容都是我干的棚饵。 我是一名探鬼主播煤裙,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼噪漾!你這毒婦竟也來了积暖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怪与,失蹤者是張志新(化名)和其女友劉穎夺刑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體分别,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遍愿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耘斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沼填。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖括授,靈堂內(nèi)的尸體忽然破棺而出坞笙,到底是詐尸還是另有隱情,我是刑警寧澤荚虚,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布薛夜,位于F島的核電站,受9級特大地震影響版述,放射性物質(zhì)發(fā)生泄漏梯澜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一渴析、第九天 我趴在偏房一處隱蔽的房頂上張望晚伙。 院中可真熱鬧,春花似錦俭茧、人聲如沸咆疗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽午磁。三九已至,卻和暖如春场斑,著一層夾襖步出監(jiān)牢的瞬間漓踢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工漏隐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喧半,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓青责,卻偏偏與公主長得像挺据,于是被迫代替她去往敵國和親取具。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 什么是pom?pom作為項(xiàng)目對象模型扁耐。通過xml表示maven項(xiàng)目暇检,使用pom.xml來實(shí)現(xiàn)。主要描述了項(xiàng)目:包括...
    hiekay閱讀 1,464評論 0 0
  • 轉(zhuǎn)自https://www.cnblogs.com/baimiaolei/p/5627755.html 和http...
    高機(jī)動戰(zhàn)鬥女孩閱讀 861評論 0 1
  • Maven使用入門 1. Maven概述 Maven是什么婉称?Maven項(xiàng)目對象模型(POM)块仆,可以通過一小段描述信...
    小小韓_小小紅閱讀 2,531評論 2 28
  • 不知從何時(shí)開始 生活里盡是忙碌 偷得閑暇之余 會想寫首小詩 年齡的增長 逐漸褪去鋒芒 日子很平和 工作沒有樂趣 一...
    夜火_閱讀 184評論 4 1
  • 感賞兒子昨晚給我寫了一封信,說出了自己心里的苦惱王暗,媽媽知道你現(xiàn)在很難受悔据,自己也很想變好,確沒有控制力俗壹,放心科汗,媽媽會...
    曉莉_f92b閱讀 147評論 0 1