maven资源resources文件引用

本文介绍了Maven项目中资源文件的多种配置方式,包括如何引用pom.xml和settings.xml中的属性,如何引用外部属性文件,以及如何通过命令行进行赋值等。
maven资源文件引用 [url]http://stonedeng.iteye.com/blog/1394882[/url]
为Maven项目配置多个源文件夹 [url]http://casheen.iteye.com/blog/540385[/url]
资源文件引用:
[b]1、maven默认系统的资源文件[/b]在src/main/resources下,[color=red]在执行mvn process-resources的时候会将此文件夹下的东西全部拷贝到classes文件夹下,同时对文件中含有${}中的值进行引用赋值[/color]

以下操作基于如下命令行的操作:mvn archetype:create -DgroupId=com.test -DartifactId=my-app -Dversion=1.0 -DpackageName=com.test-->cd my-app

[b]2、在resources文件夹下的资源文件如何引用pom.xml以及settings.xml里面的东西 [/b]
创建资源文件:src/main/resources/application.properties文件,在下面添加如下引用
${pom.name} 将引用pom.xml中的<name>my-app</name>
${pom.version} 将引用pom.xml中的version>1.0-SNAPSHOT</version>
${settings.localRepository} 将引用settings.xml中的<localRepository>F:\repository</localRepository>
同时在pom.xml中添加如下代码:
 <build>  
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>



执行 mvn process-resources,然后查看target/classes/application.properties的内容
[b]3、在resources文件夹下的资源文件如何引用外部属性文件[/b]中的配置:
创建src/main/filters/filter.properties,内容如下:
tools=maven
在src/main/resources/application.properties资源文件中引用:
message=${tools}
同时在pom.xml中添加如下配置:
 <build>  
<filters>
<filter>src/main/filters/filter.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>


执行 mvn process-resources,然后查看target/classes/application.properties的内容
[b]4、如果不想增加外部资源文件[/b],可以将所需要的属性添加到pom.xml文件中,然后在resources文件夹下的资源文件引用
pom.xml中添加如下:
 <build>  
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<properties>
<my.filter>filter</my.filter>
</properties>


在src/main/resources/application.properties资源文件中引用:
${my.filter}
执行 mvn process-resources,然后查看target/classes/application.properties的内容
[b]5、在resources文件夹下的资源文件如何通过命令行进行赋值:[/b]
在src/main/resources/application.properties资源文件中引用:
command.line.prop=${command.line.prop}
执行mvn process-resources "-Dcommand.line.prop=hello again",然后查看target/classes/application.properties的内容
<think> 我们正在讨论maven-resources-plugin插件。根据引用内容,该插件主要用于处理资源文件引用[1]指出:该插件用于处理非源代码的资源文件,如配置文件。默认资源目录是src/main/resources和src/test/resources引用[2]提到:配置该插件后,默认的资源复制行为会被覆盖,需要显式配置资源复制。同时,可以设置编码(如UTF-8)。 引用[3]展示了一个配置示例:可以指定资源目录、包含的文件模式、是否进行过滤(filtering)等。 引用[4]说明了该插件的一个目标(goal)resources:resources,它负责将主资源复制到输出目录,并默认绑定到process-resources阶段。 因此,我们可以总结如下: # Maven Resources Plugin 详解 ## 1. 核心作用 - **资源文件处理**:将项目资源文件(如配置文件、属性文件等)复制到输出目录(通常是`target/classes`) - **资源过滤**:支持使用Maven属性(例如`${project.version}`)动态替换资源文件中的占位符 - **多环境支持**:通过不同profile配置实现资源文件的差异化处理 ## 2. 默认行为 - **默认资源目录**: -资源:`src/main/resources` - 测试资源:`src/test/resources` - **默认执行阶段**: - `process-resources`(主资源- `process-test-resources`(测试资源) ## 3. 关键配置参数 | 参数名 | 说明 | 示例值 | |--------------|----------------------------------------------------------------------|--------------------------------| | `<directory>` | 资源文件所在目录 | `src/main/resources` | | `<includes>` | 指定包含的文件模式(支持Ant风格通配符) | `<include>**/*.properties</include>` | | `<excludes>` | 排除的文件模式 | `<exclude>**/test.*</exclude>` | | `<filtering>` | 是否启用属性替换(true/false) | `true` | | `<encoding>` | 资源文件编码(强烈建议显式设置) | `UTF-8` | ## 4. 完整配置示例 ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.0</version> <!-- 推荐最新版本 --> <configuration> <!-- 全局编码设置 --> <encoding>UTF-8</encoding> <!--资源配置 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>true</filtering> <!-- 启用占位符替换 --> </resource> <!-- 添加额外资源目录示例 --> <resource> <directory>src/main/config</directory> <excludes> <exclude>**/secret.*</exclude> </excludes> </resource> </resources> </configuration> </plugin> </plugins> </build> ``` ## 5. 资源过滤机制 1. **启用条件**:`<filtering>true</filtering>` 2. **替换规则**: ```properties # 资源文件示例 (application.properties) app.version=${project.version} ``` 编译后: ```properties app.version=1.0.0 ``` 3. **自定义属性**:在`<properties>`中定义的属性可直接使用 ## 6. 常见问题解决 1. **乱码问题**: ```xml <!-- 必须显式设置编码 --> <encoding>UTF-8</encoding> ``` 2. **资源覆盖问题**: - 当配置多个`<resource>`时,**后定义的目录优先级更高** - 相同文件资源会发生覆盖 3. **过滤失效排查**: - 检查`<filtering>`是否设置为true - 确认属性名拼写正确(区分大小写) §§相关问题§§ 1. 如何通过Maven Profile实现不同环境的资源配置? 2. 资源过滤时如何处理特殊字符(如@符号)? 3. 如何排除资源目录中的特定文件? 4. maven-resources-plugin与maven-source-plugin有何区别? 5. 如何扩展自定义资源目录? [^1]: Maven插件之maven-resources-plugin [^2]: maven-resources-plugin的使用 [^3]: maven中的maven-resources-plugin插件详解 [^4]: maven-resources-plugin </think>### Maven Resources Plugin 详解 #### 1. **核心作用** - **资源文件处理**:负责将非源代码资源文件配置文件、属性文件等)复制到输出目录 - **资源过滤**:支持使用 Maven 属性(如 `${project.version}`)动态替换资源文件中的占位符 - **多环境支持**:通过不同配置实现开发/生产环境的资源差异化 #### 2. **默认行为** - **默认资源目录**: ```markdown src/main/resources → target/classes src/test/resources → target/test-classes ``` - **自动执行阶段**: - `process-resources`(主资源- `process-test-resources`(测试资源) #### 3. **关键配置参数** | 参数 | 说明 | 示例值 | |---------------|----------------------------------------------------------------------|--------------------------------| | `<directory>` | 资源文件源目录 | `src/main/resources` | | `<includes>` | 包含的文件模式(Ant风格通配符) | `<include>**/*.properties</include>` | | `<excludes>` | 排除的文件模式 | `<exclude>**/test.*</exclude>` | | `<filtering>` | 是否启用属性替换(true/false) | `true` | | `<encoding>` | 资源文件编码(**必设项**,防乱码) | `UTF-8` | #### 4. **完整配置示例** ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.0</version> <!-- 推荐最新稳定版 --> <configuration> <!-- 全局编码设置 --> <encoding>UTF-8</encoding> <!--资源配置 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.yml</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> <!-- 启用占位符替换 --> </resource> <!-- 额外资源目录 --> <resource> <directory>src/main/config</directory> <excludes> <exclude>**/secret.*</exclude> <!-- 排除敏感文件 --> </excludes> </resource> </resources> </configuration> </plugin> ``` #### 5. **资源过滤机制** 1. **启用条件**:`<filtering>true</filtering>` 2. **替换规则**: ```properties # 资源文件示例 (app.properties) app.version=${project.version} ``` 编译后: ```properties app.version=1.0.0 # 被实际值替换 ``` 3. **特殊字符转义**:使用 `\` 避免 `@` 等符号被误解析 ```properties email=user\@example.com ``` #### 6. **与编译器插件的关系** - **执行顺序**: ```mermaid graph LR A[resources:resources] --> B[compiler:compile] C[resources:testResources] --> D[compiler:testCompile] ``` - **协作要点**: 1. 资源文件**先于**代码编译执行 2. 编译后的class文件可直接读取`target/classes`中的资源 #### 7. **常见问题解决** - **乱码问题**: ```xml <!-- 必须显式设置编码 --> <encoding>UTF-8</encoding> ``` - **资源未被复制**: 1. 检查`<includes>`模式是否匹配文件 2. 确认未配置`<excludes>`意外过滤 - **属性未替换**: 1. 验证`<filtering>`是否为true 2. 检查属性名拼写(区分大小写)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值