maven 打包资源文件需要注意的问题
初衷
我写这篇博客的目的是想让大家了解一些 maven 项目的结构以及打包后是什么样子的,方便大家在实际项目中去排查问题。比如:我明明在 src/main/java 下把 mybatis 的 xml 写上了,为什么项目报错读不到呢?我配置了多种环境的配置文件,真正运行时只会选择一个,所以不想把 src/main/resources 下的所以文件都打包到 target/classes 下,那该怎么办?
maven 的标准的目录结构
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。 标准的目录结构如下:
maven 资源的相关配置
src/main/java和src/test/java
这两个目录中的所有 .java 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件(比如:.xml 等)都会被忽略掉。
src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
maven 打包插件默认会把这个目录中的所有内容打入到 jar 包或者 war 包中。
resource
maven resource 需要注意的问题。默认情况下 maven 会根据标准路径去把对应的文件全部复制到 target 下。如果需要选择性打包某些文件的话,就需要用到 resource。
下面以我创建的 maven 项目 mavenDemo 为例。
在 mavenDemo 项目的 pom.xml 中加入下面配置,目的是:只将 src/main/resources 下的后缀为 properties、xml 的文件打包到 classes 文件下。效果如图 1。
使用 maven 的 clean package 命令就可以打包我们的项目到 target 文件下。注意一定要先执行 maven 的 clean 命令,后执行 package 命令。 直接使用 package 命令可能会存在缓存,使得我们看不到最新的修改。
<build> ....... <resources> <resource> <directory>src/main/resources</directory> <!-- 设置需要打包的文件,可以使用正则表达式 --> <includes> <include>**/*.yml</include> <include>**/*.xml</include> </includes> <!-- 开启资源打包过滤 --> <filtering>true</filtering> </resource> </resources> ...... </build>
我们可以看到项目打包后,src/main/resources 下的 .sql 文件就被过滤掉了,只留下了 .yml、.xml 的配置文件。
图 1
- maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析
- 使用maven打包时需要注意的问题
- qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题
- maven 打包时,src/main/java目录下的xml等资源文件没有打包进去的问题
- InstallAnywhere多语言打包过程中需要注意的问题
- air打包成exe文件,尤其是执行本地exe文件时需要打包成exe注意
- maven工程打包成runnable的jar包,拷贝资源文件和依赖jar包
- 更改文件时间属性需要注意的问题
- APK 变成 ZIP:Android 手机应用程序文件下载服务器需要注意的问题
- 关于在打包Jar文件时遇到的资源路径问题(一)
- APK 变成 ZIP:Android 手机应用程序文件下载服务器需要注意的问题
- 使用maven为不同环境打包资源文件
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- 文件上传需要注意的问题
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- 【转载】利用MAVEN打包时,如何包含更多的资源文件
- Maven打包后配置文件乱码的问题
- APK 变成 ZIP:Android 手机应用程序文件下载服务器需要注意的问题
- Java应用打包后运行需要注意编码问题