【发布时间】:2013-09-18 07:37:43
【问题描述】:
我有一个使用 maven 进行构建管理的 java 应用程序。
当我使用
运行生成的应用程序 jar 时java -jar myjar
应用程序生成的输出文件最终位于项目根目录中。因此,如果我在 /my/project/dir 中执行 jar 并创建一个文件写入器来写入 logs/mylog
生成的文件以
结尾/my/project/dir/logs/mylog
完全符合预期。
但是: 当 maven surefire 插件执行单元测试时,文件最终位于模块目录中。 假设我在 /my/module 中编译了一个 maven 项目。
编译后的文件最终位于 /my/module/target/classes。 当 maven 执行这些类时,通过单元测试,相同类的输出最终在
/my/module/logs/mylog
我希望文件最终在目标目录中,例如
/my/module/target/logs/mylog
因为这是类文件所在的位置。
所以我正在寻找一种方法来配置 maven surefire 来定义 java 类的根目录以指向目标而不是模块目录。
编辑: 我找到了这篇文章: Maven: change the directory in which tests are executed 这似乎试图解决我的问题。但是,如果我将工作目录设置为我的目标目录,测试将无法再找到我的资源,即使它们是从模块 ${basedir} 复制到 ${basedir}/target
【问题讨论】:
-
这个不清楚,
logs你在说什么?它们来自哪里,是什么造就了它们? -
我的应用程序在 Maven 外部作为 jar 运行时,会将其日志文件等放在项目根目录中。这是设计的,不是问题。但是,当 MAVEN 执行程序时,文件最终位于模块根目录中,而不是类文件所在的目标中。我该如何解决?
-
你是如何运行应用程序的?您是使用 maven 运行它还是只是 java -jar ... 或其他什么?
-
both:当我使用 java -jar 运行时,文件最终位于应用程序根目录中。当我使用 maven 运行时,相同的文件最终位于 maven 模块目录(POM、src、target 等所在的位置)我想配置 maven,以便这些文件最终位于 target 而不是 Module 目录中。
标签: maven