pom⽂件中build标签详解
前⾔:
<build >设置,主要⽤于编译设置
1.分类
在Maven的l⽂件中,存在如下两种<build>:
(1)全局配置(project build)
针对整个项⽬的所有情况都有效
(2)配置(profile build)
针对不同的profile配置
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
...
<!-- "Project Build" contains elements of the BaseBuild set and the Build set-->
<build>...</build>
<profiles>
reaction英语<profile>
<!-- "Profile Build" contains elements of the BaseBuild set only -->
<build>...</build>
</profile>
</profiles>
</project>
说明:
⼀种<build>被称为Project Build,即是<project>的直接⼦元素。
另⼀种<build>被称为Profile Build,即是<profile>的直接⼦元素。
Profile Build包含了基本的build元素,⽽Project Build还包含两个特殊的元素,即各种<...Directory>和<extensions>。
2. 配置说明
1.基本元素
⽰例如下
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<filters>
<filter>filters/filter1.properties</filter>
</filters>
...
</build>
1)defaultGoal
执⾏build任务时,如果没有指定⽬标,将使⽤的默认值。
暑期编程培训班
如上配置:在命令⾏中执⾏mvn,则相当于执⾏mvn install
2)directory
build⽬标⽂件的存放⽬录,默认在${basedir}/target⽬录
html个人介绍网页设计图片
3)finalName
build⽬标⽂件的名称,默认情况为${artifactId}-${version}
4)filter
定义*.properties⽂件,包含⼀个properties列表,该列表会应⽤到⽀持filter的resources中。
也就是说,定义在filter的⽂件中的name=value键值对,会在build时代替${name}值应⽤到resources中。                    maven的默认filter⽂件夹为${basedir}/src/main/filters
jquery库使用说明2. Resources配置
⽤于包含或者排除某些资源⽂件
<build>
...
<resources>
<resource>
<targetPath>META-INF/plexus</targetPath>
<filtering>true</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include&l</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<testResources>
...
</testResources>
...
</build>
1)resources
⼀个resources元素的列表。每⼀个都描述与项⽬关联的⽂件是什么和在哪⾥
2)targetPath
指定build后的resource存放的⽂件夹,默认是basedir。
通常被打包在jar中的resources的⽬标路径是META-INF
3)filtering
true/false,表⽰为这个resource,filter是否激活
4)directory
定义resource⽂件所在的⽂件夹,默认为${basedir}/src/main/resources
ppt图片素材网站5)includes
指定哪些⽂件将被匹配,以*作为通配符
6)excludes
指定哪些⽂件将被忽略
7)testResources
定义和resource类似,只不过在test时使⽤
  Maven多环境配置实战 filter
  ⽬前在开发⼀个wap项⽬,主要有开发、测试和最终部署上线⼏个阶段,每个阶段对配置(数据库、
⽇志)都有不同的设置。以前都是以开发环境为主,在测试和部署上线时由部署⼯程师负责修改配置并上线。但是公司并⾮都有⼀个项⽬,我们也不是只负责⼀个项⽬,这样的⼯作⽅式导致每每上线时⼤家都⼼惊胆颤,实在忍受不了折磨,决定研究下下如何解决这个问题。到⽅案后,不敢独享,将结果向⼤家介绍下。思路:
  ⼏个环境中主要的不同可以概括为数据库配置和log⽇志路径配置以及外部依赖的接⼝配置不⼀样,但是我们这⾥简单起见,假设只考虑数据库配置。
  这样的话,如果能实现在⽣成不同的发布包时对资源进⾏不同的替换就可以达到⽬的了。经过研究maven,确定了最终⽅案。最终⽅案:
  ⾸先需要在pom⽂件中确定filter和要filter的资源,这是通过在build节点中添加filter和resource来实现的,⽰例如下:
<filters>
    <filter>src/main/filters/filter-${env}.properties</filter>
</filters>
<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>
  上述配置表⽰要对src/main/resources下的资源进⾏过滤,因为该⽬录下没有⼆进制⽂件,所以没有excluding。过滤时采⽤的过滤⽂件为src/main/filters/filter-${env}.properties⽂件,其中${env}是⼀个变量,表⽰当前使⽤的环境,这是通过在pom⽂件中通过profile定义的,如下所⽰:
<properties>                                                                                       
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>
  其中斜体字部分表⽰缺省的变量值,这样在开发时就不⽤每次指定这个值。在测试和部署上线时分别通过-P传⼊当前的profile id,这样maven就会将env变量设置为对应的值,从⽽导致使⽤不同的filter⽂件来对resources下的⽂件进⾏过滤替换。
  例如:当调⽤maven package时传⼊-Pdev(因为我们将dev设置为默认,所以也可以不传)参数,
则会使⽤
    filter-dev.properties中的内容来替换resources⽬录中的配置⽂件,具体到我们的项⽬就是db.properties,内容如下:
....... tion.url=${xiangmu.jdbc.url} tion.username=${xiangmu.jdbc.username}
properties是什么文件
filter-dev.properties⽂件内容如下:
................ xiangmu.jdbc.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 xiangmu.jdbc.username=root xiangmu.jdbc.password=abcdefg .................
这样在编译结束后
db.properties的内容就会变为: tion.url=jdbc:mysql://localhost:3306/xiangmu?
autoReconnect=true&useUnicode=true&characterEncoding=tion.username=tion.password=abcdefg
3 plugins配置
⽤于指定使⽤的插件
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>test</classifier>
</configuration>
<dependencies>...</dependencies>
<executions>...</executions>
</plugin>
</plugins>
</build>
4  pluginManagement配置
pluginManagement的配置和plugins的配置是⼀样的,只是⽤于继承,使得可以在孩⼦pom中使⽤。
⽗pom:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。