pom中maven变量相关

文件相关

${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
  • 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值