如何更改全局maven默认目标目录?

时间:2018-02-19 22:02:19

标签: java maven settings pom.xml target

我猜想要改变maven版本的输出目标目录。 正如我所看到的更多人问approximately same question,我稍后改写了一下:

  

我希望所有m2项目生成的文件都可以使用   特定的,不同于默认的构建目录。例如,如果我   有项目P1和P2,默认构建目录是P1 / target   和P2 /目标。我想把它改成P1 / target之类的东西   和P2 / target / 甚至更好 - temp / P1 / target   和/ temp / P2 / target

     

我不想修改每个pom.xml。我想这样做   全球,我的环境特定设置。

     

看起来有几个maven插件基于它们的构建目录路径   on" project.build.directory"所以我试过......" m2 -   Dproject.build.directory = / temp / target package"但这没有效果。

     

是否有人知道任何有效的方法 - 通过   settings.xml或通过-D或其他一些全局方法?

2 个答案:

答案 0 :(得分:0)

如果您找到-D解决方案,那么很容易将其设为全局。 只需使用MAVEN_OPTS环境变量即可。 Maven会选择它并将其应用于每个版本。

在Windows上(或使用UI设置)

set MAVEN_OPTS=-DsomeSystemProp=value

或在Linux上

export MAVEN_OPTS=-DsomeSystemProp=value

来源:https://maven.apache.org/configure.html

注意1: .mvn目录中的.m2目录也是一个选项,但我从未在用户级别使用此目录。

注2:具有约定优于配置的东西往往会忘记配置部分。我已经看到硬编码的target目录作为插件和pom.xml文件中的输出目录。请注意这一点,如果某些行为很有趣,请尝试使用标准输出目录进行构建。

答案 1 :(得分:0)

在一个旧项目中,我们使用ramdisk加快了构建速度。

我必须将M2_RAMDISK环境变量设置为我的ramdisk,其余的都由我来处理。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>poc</groupId>
    <artifactId>ramdisk</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
        <directory>${override.project.build.directory}</directory>
    </build>
    <properties>
        <override.project.build.directory>target</override.project.build.directory>
    </properties>
    <profiles>
        <profile>
            <id>ramdisk</id>
            <activation>
                <property>
                    <name>env.M2_RAMDISK</name>
                </property>
            </activation>
            <properties>
                <override.project.build.directory>${env.M2_RAMDISK}/${project.groupId}/${project.artifactId}/${project.version}</override.project.build.directory>
            </properties>
        </profile>
    </profiles>
</project>

覆盖构建的输出目录是有风险的业务,因为某些工具仅使用target目录而不是属性值。