【问题标题】:Can I move maven2 "target" folder to another device?我可以将 maven2“目标”文件夹移动到另一台设备吗?
【发布时间】:2009-06-17 06:28:40
【问题描述】:

我真的很想让 maven 将“目标”文件夹写入不同的设备(ramdisk),我通常认为这是不同的路径。是否有任何符合 maven2 的方法来做到这一点?

我正在尝试在 Windows 上解决此问题,并且首选符合 maven 的策略。

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    如果您碰巧所有项目都扩展了公司父 pom,那么您可以尝试添加又一层间接,如下所示:

    公司POM:

    <build>
      <directory>${my.build.directory}</directory>
    </build>
    <properties>
      <!-- sensible default -->
      <my.build.directory>target</my.build.directory>
    </properties>
    

    在您的 settings.xml 中:

    <properties>
      <!-- Personal overridden value, perhaps profile-specific -->
      <my.build.directory>/mnt/other/device/${project.groupId}-${project.artifactId}/target</my.build.directory>
    </properties>
    

    如果本地 POM 定义优先于 settings.xml 定义,那么您可以尝试忽略默认值,代价是让您控制的每个 Maven 实例(开发人员、构建机器等)都指定 ${my.build .directory} 在其 settings.xml 中。

    【讨论】:

    • 这不是使每个模块的构建目录相同,而不是每个模块一个目录吗?因此,如果您执行“mvn install”(而不是“mvn clean install”),来自所有先前编译的模块的文件最终会出现在结果(jar)中吗?也许你可以通过 /mnt/other/device/${artifactId}-target 来解决这个问题。 (未经测试!)
    • 非常好!我更新了上面的 settings.xml,但也包含了 groupId,因为 artifactIds 偶尔会在项目中重叠(例如“core”、“utils”等)
    【解决方案2】:

    其实 Maven 并不像大家想的那样受限,所有的 POM 都是由一个 Super POM 扩展而来的,其中定义了目标文件夹的名称

    <build>
      <directory>target</directory>
      <outputDirectory>target/classes</outputDirectory>
      <finalName>${artifactId}-${version}</finalName>
      <testOutputDirectory>target/test-classes</testOutputDirectory>
     .
     .
     .
    </build>
    

    当然,你可以用你想要的任何值覆盖,所以继续在你的 POM 中更改 元素(和其他相关元素)

    【讨论】:

    • 这似乎是我想在我的 settings.xml 中做的事情,因为它是为我的工作站准备的。但这似乎不受支持?
    • krosenvold,您可以将上述内容添加到其他 pom 继承自的超级 pom 中 - 但它也会影响使用相同超级 pom 的其他开发人员。
    • 经过一上午的网络搜索后,我得出的结论是,除非 POM 考虑到这一点,否则无法在不修改 POM 的情况下覆盖项目的目标目录。如果有人能纠正我,我会非常高兴。
    【解决方案3】:

    以防万一您想为自己的 Maven3 修复此问题而不涉及项目中的任何内容,请找到文件:

    $MAVEN_HOME/lib/maven-model-builder-3.X.Y.jar
    

    并在里面更新super-pom

    org/apache/maven/model/pom-4.0.0.xml
    

    换行

    <directory>${project.basedir}/target</directory>
    

    <directory>/tmp/maven2/${project.groupId}-${project.artifactId}/target</directory>
    

    所以下次你将构建任何 maven 项目时 - 它会将所有类放在 /tmp/ 下

    【讨论】:

      猜你喜欢
      • 2019-11-13
      • 1970-01-01
      • 2015-03-22
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多