maven可以解析文件夹结构发生变化的本地资源吗?
Posted
技术标签:
【中文标题】maven可以解析文件夹结构发生变化的本地资源吗?【英文标题】:Can maven resolve local resources whose folder structure changed? 【发布时间】:2013-06-03 18:40:09 【问题描述】:我正在尝试将现有项目从 Ant 项目迁移到 Maven 项目。 Ant 项目的结构如下:
|-root
|---resources
|------foo
|------yaz
|---src
|------SomeFile.java
Maven项目的结构为
|-root
|---src
|------main
|---------java
|------------SomeFile.java
|------test
|---------resources
|------------foo
|------------yaz
不幸的是,代码中有很多对“资源”文件夹的显式引用。一些例子:
@ContextConfiguration("classpath:/resources/foo/bar.xml")
ApplicationContext context =
new FileSystemXmlApplicationContext("resources/foo/baz.xml");
File file = new File("resources/yaz/blah.gif");
etc...
更改所有引用需要花费大量精力(并且由于其他业务规则,代码必须保留在“资源”文件夹中)。我想知道 Maven 中是否有一种简单的方法来解决文件夹结构的变化。这样,当 JUnit 测试运行或通过 IDE (Netbeans) 启动应用程序时,它将正确解析资源。
换句话说,代码在 Ant 中运行良好,但在移动到 Maven 后由于资源已移动到不同的文件夹结构而中断。
【问题讨论】:
【参考方案1】:您的代码应该始终引用构建区域中的文件,而不是源代码区域。看来您的 Maven 构建并没有完全复制 ant 构建正在做的事情。检查 target/classses 文件夹(稍后构建 jar 文件的基础)并查看资源文件的位置。如果错了,要么操作源目录结构,直到你得到你想要的,要么使用 pom 元素设置正确 - http://maven.apache.org/pom.html#Resources
【讨论】:
谢谢,这正是我想要的!【参考方案2】:构建战争时,将src/main/resources
放入/target/resources
,而不是直接将/target
。
THIS PAGE 显示outputDirectory
参数,该参数指定资源的输出文件夹。
我认为它看起来像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<outputDirectory>$project.build.outputDirectory/resources</outputDirectory>
</configuration>
</plugin>
【讨论】:
【参考方案3】:据我所知,您的源代码是错误的,因为您正在引用作为默认值一部分的资源文件夹。
所以通常位于 int src/main/resources
的所有内容都会在构建过程中被复制到 target/classes
,这意味着您需要像这样引用此类资源:
@ContextConfiguration("classpath:/foo/bar.xml")
ApplicationContext context =
new FileSystemXmlApplicationContext("/foo/baz.xml");
但我不能 100% 确定上述方法是否真的有效。据我所知,只有当您的资源通过类路径可用时它才会起作用,如果包含资源的 jar 不正确。
此外,将资源引用为文件是错误的方式,因为如果将构建结果打包到 jar 中,您将无法将资源作为文件访问。你需要通过
InputStream is = this.getClass().resourcesAsStream("/yaz/blah.gif");
但不是这样的:
File file = new File("/yaz/blah.gif");
这是行不通的。
如果您确实需要使用项目结构,则需要通过 build helper maven plugin 添加补充资源文件夹,但我建议最好使用 Maven 中的默认布局。
【讨论】:
以上是关于maven可以解析文件夹结构发生变化的本地资源吗?的主要内容,如果未能解决你的问题,请参考以下文章
SSM框架MyBatis笔记 --- 三层架构;MyBatis框架结构;MyBatis 核心配置文件;sql 映射文件;MyBatis 使用初步(通过Maven添加依赖)