Maven:如何将应用程序输出限制到目标目录
我有一个java应用程序,它使用maven进行构建管理 当我运行生成的应用程序jar时Maven:如何将应用程序输出限制到目标目录,maven,Maven,我有一个java应用程序,它使用maven进行构建管理 当我运行生成的应用程序jar时 java -jar myjar 应用程序生成的输出文件最终位于项目根目录中。因此,如果我在/my/project/dir中执行jar并创建一个filewriter来写入logs/mylog 生成的文件以 /my/project/dir/logs/mylog /my/module/logs/mylog 一如所料 然而: 当maven surefire插件执行单元测试时,文件最终位于模块目录中。 假设我在/
java -jar myjar
应用程序生成的输出文件最终位于项目根目录中。因此,如果我在/my/project/dir中执行jar并创建一个filewriter来写入logs/mylog
生成的文件以
/my/project/dir/logs/mylog
/my/module/logs/mylog
一如所料
然而:
当maven surefire插件执行单元测试时,文件最终位于模块目录中。
假设我在/my/module中编译了一个maven项目
编译后的文件最终位于/my/module/target/classes中。
当maven通过单元测试执行这些类时,相同类的输出以
/my/project/dir/logs/mylog
/my/module/logs/mylog
我想文件结束在目标目录一样
/my/module/target/logs/mylog
因为这是类文件所在的位置
因此,我正在寻找一种方法来配置maven surefire,以定义java类的根目录,从而指向目标,而不是模块目录
编辑:
我发现这个帖子:
这似乎试图解决我的问题。但是,如果我将workingdirectory设置为my target dir,测试将无法再找到我的资源,即使它们是从模块${basedir}复制到${basedir}/target您应该将应用程序的working dir设置为./target(或者以Maven属性的方式:${project.build.directory})我不能确切地告诉你如何做你需要做的事情,因为没有真正的信息 我可以给你一个关于使用什么的提示 当有选择地启用Maven时,Maven可以更改其源代码和行为 配置文件专门设计用于执行您想要执行的操作。解决方案: 默认情况下,maven surefire插件在modules主目录中执行其测试。 为了避免这种情况,将插件的workingdirectory设置为目标目录
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>...</version>
<configuration>
<workingDirectory>${project.build.directory}</workingDirectory>
<basedir>${project.build.directory}</basedir>
</configuration>
</plugin>
org.apache.maven.plugins
maven surefire插件
...
${project.build.directory}
${project.build.directory}
注意,如果测试依赖于模块basedir中root的某些资源,则需要复制这些资源。我能找到的最简单的方法是使用资源插件
<build>
<resources>
<resource>
<directory>dependency</directory>
<targetPath>${project.build.directory}/dependency</targetPath>
</resource>
...
</build>
附属国
${project.build.directory}/dependency
...
这还不清楚,你在说什么日志
?它们来自哪里,是什么创建了它们?我的应用程序在maven之外作为jar运行时,将其日志文件等放在项目根目录中。这是设计好的,不是问题。但是,当MAVEN执行该程序时,文件最终会出现在modules root dir中,而不是类文件所在的target中。我如何修复它?您如何运行应用程序?您是使用maven来运行它还是只使用java-jar。。。或者其他什么?两者都有:当我使用java-jar运行时,文件最终会出现在应用程序根目录中。当我使用maven运行时,相同的文件会出现在maven模块目录中(POM、src、target等位于该目录中),我希望配置maven,使这些文件出现在target而不是Module目录中。这需要我对应用程序本身进行更改。该项目不会在生产中的maven内部运行,因此这将是一个麻烦的解决方案。我以前的表述非常不清楚。我已经编辑了我的问题。你用什么插件通过Maven“运行”你的应用程序?实际上,这里不需要配置文件。Maven应该始终将应用程序根目录定向到此项目中的目标。