标签:filter 构建项目 repo ide arch cto 基本 支持 source
POM(Project Object Model,项目对象模型)是使用 Maven 构建项目时的基本组件,它包含了关于项目和各种配置细节的信息,Maven 使用这些信息构建项目。
POM 还包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。
IDEA 的 Modules 中的项目根据它的 pom.xml 文件来决定 Dependencies 中的依赖包。
一个项目的 pom.xml 文件的基本配置如下所示:
<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>
<groupId>cn.reghao</groupId>
<artifactId>buguer</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true<activeByDefault>
</activation>
<properties>
<server-envrionment>dev</server-envrionment>
</properties>
<build>
<filters>
<filter>
src/main/resources/${server-envrionment}.properties
</filter>
</filters>
</build>
</profile>
</profiles>
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>../common/src/main/resources/</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
整个文件可分为以下几个部分:
- dependencies
- profiles
- build
- properties
<modelVersion>4.0.0</modelVersion>
<groupId>cn.reghao</groupId> // 当前项目的实际项目名
<artifactId>buguer</artifactId> // 当前项目中的一个 maven 项目模块名
<version>1.0</version> // maven 项目模块版本号
<packaging>war</packaging> // maven 项目模块打包的方式,默认为 jar
本配置会得到一个 <artifactId>-<version>.<packaging> 格式的包,即 buguer-1.0.war
groupId 和 artifactId 称为“坐标”,这是为了保证项目的唯一性而提出的。
若将项目放到 maven 本地仓库,则需根据这两个 id 去寻找指定的项目。
groupId 一般分为多段,例如 cn.reghao 分别表示域名和一个名字。
artifactId 一般为项目名字。
dependencies 元素中定义了项目依赖的包。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
上述配置确定了一个依赖的包。
除去这三个元素外,还可添加 type、scope、optional 等元素。
- type,表示依赖的类型,缺省为 jar 包。
scope,表示依赖的作用域,分别有:
compile(缺省):对编译、测试和运行三种 CLASSPATH 都有效。
test:只对测试有效。
provided:只对编译和测试有效。
runtime:只对测试和运行有效。
system:系统依赖,依赖的包从计算机本地导入,与 systemPath 配合使用。Maven 不会在 Repository 中查找它。
optional,表示依赖是否具有传递性,默认是 false,即依赖具有传递性。
假设要导入 A.jar 包,但它依赖于 B.jar 包,此时 maven 会自动导入 B.jar。
传递性依赖存在的一个问题是,若项目中的两个 jar 分别依赖不同版本的 jar 包,此时会出现错误。
可将 optional 设置为 true,即不传递依赖。不传递不需要的功能,可减少冲突,符合单一职责原则。
exclusions,用来替换某个依赖中依赖包的作用。
若 A 需要 B,B 包含 C 依赖,那么 A 可使用此元素声明不要 C 依赖。
在 profile 元素中可以定义大部分在 pom 里定义的内容(除去它自己),当一个 profile 被激活后,它定义的内容会覆盖原 pom 内定义的相同内容,从而可以通过激活不同的 profile 来使用不同的配置。
<profile>
<id>dev</id>
<properties>
<server-envrionment>dev</server-envrionment>
</properties>
<build>
<filters>
<filter>
src/main/resources/${server-envrionment}.properties
</filter>
</filters>
</build>
</profile>
本配置可在构建项目时根据 server-envrionment 变量的值来选择相应的 properties 文件。
filter 元素定义 *.properties 文件,它包含一个 properties 列表,该列表会应用在支持 filter 的 resources 中。
profile 可通过显式或隐式的方式被激活:
隐式激活 profile 则提供了多种方式:
使用 activeByDefault 元素默认激活
<activation> <activeByDefault>true<activeByDefault> </activation>
使用 os 元素根据操作系统类型激活
<activation> <os> <name>linux</name> <family>unix</family> <arch>amd64</arch> <version>3.19.0-30-generic</version> </os> </activation>
使用 jdk 元素根据 JDK 版本激活
<activation> <jdk>1.8</jdk> </activation>
使用 property 元素根据环境变量的值激活
<activation> <property> <name>debug</name> <value>true</value> </property> </activation>
使用 file 元素根据文件是否存在激活
<activation> <file> <missing>/path/to/missing/file</missing> <exists>/path/to/exists/file</exists> </file> </activation>
build 元素指定 maven 在构建项目时的一些属性。
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
defaultGoal
执行构建任务时,若未指定目标,则将使用的缺省值。
在命令行中执行 mvn 则相当于执行 mvn install
directory
构建目标文件的存放目录,缺省为 ${basedir}/target 目录
finalName
构建目标文件的文件名,缺省为 ${artifactId}-${version}。
resource 元素用于指定项目中需要的资源,它们(通常)不是代码,不会被编译,只是被绑定在项目中或用于其目的(例如代码生成)。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>../common/src/main/resources/</directory>
</resource>
</resources>
directory
定义资源所在的目录,默认为 ${basedir}/src/main/resources
filtering
对于当前资源,filter 是否激活(true/false)
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF8</encoding>
</configuration>
</plugin>
</plugins>
configuration
配置该 plugin 期望得到的 properies。
源文件使用 jdk1.8,编译后的目标文件使用 jdk1.8,使用 utf8 编码。
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
指定项目中代码源文件的编码
标签:filter 构建项目 repo ide arch cto 基本 支持 source
原文地址:https://www.cnblogs.com/reghao/p/9491949.html