【问题标题】:Maven: How to confine the application output to the target directoryMaven:如何将应用程序输出限制到目标目录
【发布时间】: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


【解决方案1】:

您应该将应用程序的工作目录设置为 ./target(或以 Maven 属性方式:${project.build.directory})

【讨论】:

  • 这需要我对应用程序本身进行更改。该项目不会在生产环境中的 maven 中运行,因此这将是一个麻烦的解决方案。
  • 我之前的表述很不清楚。我已经编辑了我的问题。
  • 您使用什么插件通过 Maven “运行”您的应用程序?
【解决方案2】:

解决方案: 默认情况下,maven surefire 插件在模块主目录中执行其测试。 为了避免这种情况,请将插件的工作目录设置为目标目录。

<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>

请注意,如果测试依赖于模块 basedir 中具有根目录的某些资源,您需要将它们复制过来。我能找到的最简单的方法是使用资源插件。

<build>
    <resources>
        <resource>
            <directory>dependency</directory>
            <targetPath>${project.build.directory}/dependency</targetPath>
        </resource>
...
</build>

【讨论】:

    【解决方案3】:

    我不能确切地告诉你如何做你需要做的,因为没有真实的信息

    我可以给你一个关于使用什么的提示。

    Maven profiles 可以在选择性启用时更改 Maven 的来源和行为。

    个人资料专为做您想做的事而设计。

    【讨论】:

    • 其实这里不需要配置文件。 Maven 应始终将应用程序根目录指向此项目中的目标。
    猜你喜欢
    • 2010-09-21
    • 2014-06-10
    • 2018-10-28
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多