【发布时间】:2016-05-05 18:14:15
【问题描述】:
在构建期间执行测试之前,我需要将资源文件 (menu.xml) 从依赖 jar 文件的根目录复制到当前项目的输出目录的根目录。该文件必须可用于测试,但稍后也可用于使用...getClassLoader().getResourceAsStream("menu.xml") 的主程序。
我正在尝试this question 中建议的解决方案,但它不起作用。
这是 pom 文件的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>resource-dependencies</id>
<phase>process-test-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeArtifactIds>pm1j-jar</includeArtifactIds>
<includes>menu.xml</includes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
当我执行mvn clean process-test-resources 时,我看到以下输出:
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ pm1-config ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-dependency-plugin:2.8:unpack-dependencies (resource-dependencies) @ pm1-config ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.709 s
[INFO] Finished at: 2016-05-05T15:01:06-03:00
[INFO] Final Memory: 30M/458M
[INFO] ------------------------------------------------------------------------
文件 menu.xml 未复制到目标文件夹。我怎么能看出什么可能是错的?我尝试在调试日志级别运行 maven,可以看到配置已正确解析,但插件没有记录任何有关正在发生的事情的其他信息。
...
[DEBUG] (f) includeArtifactIds = pm1j-jar
[DEBUG] (s) includes = menu.xml
...
[DEBUG] (f) outputAbsoluteArtifactFilename = false
[DEBUG] (s) outputDirectory = c:\Dev\workspaces\config\pm1j\pm1-config\target\classes
...
[DEBUG] (f) project = MavenProject: com.expersoft.pm1j:pm1-config:3-SNAPSHOT @ c:\Dev\workspaces\config\pm1j\pm1-config\
pom.xml
[DEBUG] -- end configuration --
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.014 s
[INFO] Finished at: 2016-05-05T15:09:29-03:00
[INFO] Final Memory: 27M/328M
[INFO] ------------------------------------------------------------------------
【问题讨论】:
-
是menu.xml直接在依赖jar的根目录下吗?你在依赖项列表中有那个 jar 吗?您是否尝试过文档 maven.apache.org/plugins/maven-dependency-plugin/… 中提到的 **/menu.xml 之类的东西 - 如果您仍然从类路径加载文件,请完全解压它?
-
为什么需要这样做?你不需要这样做。如果资源位于类路径中 JAR 的根目录中,则它位于类路径的根目录中,因此您“想要”的内容绝对没有任何用途。因此:您真正想做什么?你想解决的真正问题是什么?
-
是的,文件在依赖jar的根目录下。我现在想通了这个问题。 jar 不在依赖项列表中。混乱开始是因为我首先尝试了插件的 unpack 目标,它从存储库下载 jar,效果很好。但是在这种情况下,我不能使用该文件进行测试,因为它发生在生命周期的后期阶段。我想我将不得不退回到以前的解决方案,即使用 maven-resources-plugin 从另一个项目的源文件夹复制文件。
标签: java maven maven-dependency-plugin