文件相关
${project} 是 pom.xml 的根节点, 工程的根目录
p r o j e c t . b a s e d i r ( 同 {project.basedir} (同 project.basedir(同{basedir})就是当前pom.xml文件所在的目录。
Maven内置属性说明
Maven共有6类属性:
内置属性
Maven预定义,用户可以直接使用
-
${basedir} 表示项目根目录,即当前pom.xml文件的目录
-
${version}表示项目版本
-
p r o j e c t . b a s e d i r 同 {project.basedir}同 project.basedir同{basedir}
-
${project.baseUri}表示项目文件地址
-
${maven.build.timestamp}表示项目构件开始时间
-
m a v e n . b u i l d . t i m e s t a m p . f o r m a t 表 示 属 性 {maven.build.timestamp.format}表示属性 maven.build.timestamp.format表示属性{maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。用法如下:
<properties> <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format> </properties>
POM属性
使用pom属性可以引用到pom.xml文件对应元素的值
-
${project.build.sourceEncoding}表示主源码的编码格式
-
p r o j e c t . b u i l d . f i n a l N a m e 表 示 输 出 文 件 名 称 , 默 认 为 默 认 为 p r o j e c t . a r t i f a c t I d − {project.build.finalName}表示输出文件名称, 默认为默认为{project.artifactId}- project.build.finalName表示输出文件名称,默认为默认为project.artifactId−{project.version}
-
p r o j e c t . v e r s i o n 表 示 项 目 版 本 , 与 {project.version}表示项目版本,与 project.version表示项目版本,与{version}相同
-
${project.build.sourceDirectory}:项目的主源码目录,默认为 src/main/java
-
${project.build.testSourceDirectory}:项目的测试源码目录,默认为 src/test/java
-
${project.build.directory}:项目构件输出目录,默认为 target/
-
${project.outputDirectory}:项目主代码编译输出目录,默认为 target/classes/
-
${project.testOutputDirectory}:项目测试代码编译输出目录,默认为 target/test-classes/
-
${project.groupId}:项目的 groupId
-
${project.artifactId}:项目的 artifactId
自定义属性
在pom.xml文件的标签下定义的Maven属性
<project>
<properties>
<my.pro>abc</my.pro>
</properties>
</project>
在其他地方使用${my.pro}使用该属性值。
settings.xml文件属性
与pom属性同理,用户使用以settings.开头的属性引用settings.xml文件中的XML元素值
- ${settings.localRepository}表示本地仓库的地址
Java系统属性
所有的Java系统属性都可以使用Maven属性引用
-
使用mvn help:system命令可查看所有的Java系统属性
-
System.getProperties()可得到所有的Java属性
-
${user.home}表示用户目录
环境变量属性
所有的环境变量都可以用以env.开头的Maven属性引用
-
使用mvn help:system命令可查看所有环境变量
-
${env.JAVA_HOME}表示JAVA_HOME环境变量的值
Maven属性默认只有在POM中才会被解析,因此需要让Maven解析资源文件中的Maven属性。Maven用maven-resources-plugin处理资源文件。它默认的行为只是将项目主资源文件复制到主代码编译输出目录中,将测试资源文件复制到测试代码编译输出目录中。
Maven默认的主资源目录和测试资源目录的定义是在超级POM中,要为资源目录开启过滤,只要在此基础上添加一行filtering配置即可。
Filtering是maven resource插件的功能,作用是用环境变量,pom文件里定义的属性和指定文件里的属性替换属性文件的占位符。(超级pom在 apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml)
Maven项目标准目录结构
- src
- main
- java 源文件
- resources 资源文件
- filters 资源过滤文件
- config 配置文件
- scripts 脚本文件
- webapp web应用文件
- test
- java 测试源文件
- resources 测试资源文件
- filters 测试资源过滤文件
- it 集成测试
- assembly assembly descriptors
- site Site
- main
- target
- generated-sources
- classes
- generated-test-sources
- test-classes
- xxx.jar
- pom.xml
- LICENSE.txt
- NOTICE.txt
- README.txt
Maven打包资源文件
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
src/main/java和src/test/java
这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。
默认情况下maven只打包src/main/resource下的资源,通过:
1、设置build_resources
2、使用build-helper-maven-plugin插件
3、使用maven-resources-plugin插件
都可以自定义要打包的资源
一般情况下,我们用到的资源文件(各种xml,properties,xsd文件)都放在src/main/resources下面,利用maven打包时,maven能把这些资源文件打包到相应的jar或者war里。
有时候,比如mybatis的mapper.xml文件,我们习惯把它和Mapper.java放在一起,都在src/main/java下面,这样利用maven打包时,就需要修改pom.xml文件,来吧mapper.xml文件一起打包进jar或者war里了,否则,这些文件不会被打包的。(maven认为src/main/java只是java的源代码路径)。
方法1
其中**/*这样的写法,是为了保证各级子目录下的资源文件被打包。
<build>
<finalName>test</finalName>
<!-- 这样也可以把所有的xml文件,打包到相应位置。 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
方法2
利用build-helper-maven-plugin插件
<build>
...
</plugins>
...
<!--
此plugin可以用
利用此plugin,把源代码中的xml文件,
打包到相应位置,这里主要是为了打包Mybatis的mapper.xml文件
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
方法3
利用maven-resources-plugins插件
<build>
...
</plugins>
...
<!--
此plugin可以用
利用此plugin,把源代码中的xml文件,打包到相应位置,
这里主要是为了打包Mybatis的mapper.xml文件
-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
maven resources插件说明
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>
-
targetPath:指定build资源到哪个目录,默认是base directory
-
filtering:指定是否将filter文件(即build下的filters里定义的*.property文件)的变量值在这个resource文件有效,例如上面就指定那些变量值在configuration文件无效。
-
directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
-
includes:指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件。
-
excludes:指定不包含在内的patterns,如果inclues与excludes有冲突,那么excludes胜利,那些符合冲突的样式的文件是不会包含进来的。
-
testResources:这个模块包含测试资源元素,其内容定义与resources类似,不同的一点是默认的测试资源路径是${basedir}/src/test/resources,测试资源是不部署的。
默认情况下,如果没有指定resources,目前认为自动会将classpath下的src/main/java下的.class文件和src/main/resources下的.xml文件放到target里头的classes文件夹下的package下的文件夹里。如果设定了resources,那么默认的就会失效,就会以指定的includes和excludes为准。例如,为了使打包的jar包里头包含.java源文件。
参考
http://maven.apache.org/guides/introduction/introduction-to-the-pom.html
http://maven.apache.org/pom.html
http://maven.apache.org/settings.html
https://blog.csdn.net/tototuzuoquan/article/details/79285551
https://www.cnblogs.com/pixy/p/4798089.html