Maven:如何从命令行更改到目标目录的路径?


80

Maven:如何从命令行更改到目标目录的路径?

(在某些情况下,我想使用另一个目标目录)



2
简单的答案:我有一个诸如Eclipse之类的IDEtarget/内置于中,并且我也希望能够从命令行进行构建而又不会使这两个过程相互影响。
约翰·沙利文2013年

我为此找到的另一个用例-src/it/my-integration-test-project/pom.xml从命令行构建集成测试,而无需target在源代码树中创建目录,当集成测试作为包含项目的验证阶段的一部分运行时,该目录将被复制。
Mike Samuel

1
这回答了你的问题了吗?使用Maven进行树外构建。可能吗?
030

Answers:


92

您应该使用配置文件。

<profiles>
    <profile>
        <id>otherOutputDir</id>
        <build>
            <directory>yourDirectory</directory>
        </build>
    </profile>
</profiles>

然后使用您的个人资料开始Maven

mvn compile -PotherOutputDir

如果您真的想从命令行定义目录,则可以执行以下操作(完全不建议这样做):

<properties>
    <buildDirectory>${project.basedir}/target</buildDirectory>
</properties>

<build>
    <directory>${buildDirectory}</directory>
</build>

像这样编译:

mvn compile -DbuildDirectory=test

那是因为您不能使用来更改目标目录 -Dproject.build.directory


1
非常感谢你。为什么不建议第二种解决方案?
伊戈尔·穆欣

1
@iimuhin,第一个解决方案是正确使用maven配置提供的可能性,第二个解决方案是使它工作的一种技巧。如果-Dproject.build.directory要使用这些选项,则将可用;这是解决该-Dproject.build.directory问题的方法。加上第一个解决方案,您可以指定路径一劳永逸的,你不能这样做的目录名拼写错误,当你启动命令行,你可以方便的使用,即使你从一个IDE等工作,该解决方案
科林Hebert 2010年

8
配置文件解决方案的问题在于,用于更改目标目录的许多用例都是特定于用户的(例如想要构建到ram磁盘),并且不属于pom。用户特定的settings.xml中的配置文件不能包含build元素,因此这不是一个选择。
EricS 2014年

我喜欢这个答案,但也许包括您可以通过settings.xml而不是命令行来激活配置文件,以实现更大的可移植性?
Rogue 2015年

1
我喜欢您的“不推荐的解决方案”,因为它使我能够在备用目录中的命令行上进行构建,因此不会干扰指向默认$ {project.basedir} / target的Eclipse。因此,我可以在同时在命令行上构建时在Eclipse中进行编码,而无需等待Eclipse刷新/重建
Francois Marot

28

Colin是正确的,应该使用配置文件。但是,他的答案将概要文件中的目标目录硬编码。另一种解决方案是添加一个配置文件,如下所示:

    <profile>
        <id>alternateBuildDir</id>
        <activation>
            <property>
                <name>alt.build.dir</name>
            </property>
        </activation>
        <build>
            <directory>${alt.build.dir}</directory>
        </build>
    </profile>

这样做的结果是将生成目录更改为alt.build.dir属性提供的内容,该属性可以在POM中,用户设置或命令行中提供。如果该属性不存在,则编译将在常规目标目录中进行。


很抱歉n00b问题,但是在用户的设置文件中设置属性的合适方法是什么呢?我从“设置参考”中了解到,设置文件中设置的属性不会插值到设置文件中。
Michael Scheper

此外,这将带来什么优势?我可能会丢失一些东西,但是假设在命令行中指定了OP的“ case”,这是否会使参数-Dalt.build.dir=~/mytarget等同于-D用于其他属性?
Michael Scheper

啊,我刚刚意识到,这里的每个人都在谈论将配置文件添加到POM,而不是settings.xml。那将使我的问题至少与n00b一样。对于那个很抱歉。
Michael Scheper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.