Maven:コマンドラインからターゲットディレクトリへのパスを変更するにはどうすればよいですか?


82

Maven:コマンドラインからターゲットディレクトリへのパスを変更するにはどうすればよいですか?

(場合によっては別のターゲットディレクトリを使用したい)



2
簡単な答え:EclipseなどのIDEをに組み込んtarget/でいますが、2つのプロセスがお互いに足を踏み入れることなく、コマンドラインからもビルドできるようにしたいと考えています。
ジョン・サリバン

私がこれについて見つけた別のユースケース-統合テストが含まれているプロジェクトの検証フェーズの一部として実行されるときにコピーされるディレクトリをソースツリーにsrc/it/my-integration-test-project/pom.xml作成せずに、コマンドラインからのように統合テストを構築しtargetます。
マイクサミュエル

1
これはあなたの質問に答えますか?Mavenを使用したツリー外ビルド。出来ますか?
0 3020年

回答:


93

プロファイルを使用する必要があります。

<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
どうもありがとうございました。2番目のソリューションが推奨されないのはなぜですか?
Igor Mukhin 2010年

1
@iimuhin、最初の解決策はMaven構成によって与えられる可能性の正しい使用法であり、2番目の解決策はそれを機能させるためのより多くのトリックです。オプション-Dproject.build.directoryを使用することを意図している場合、それは使用可能です。これは-Dproject.build.directory問題の回避策です。コマンドラインを起動したときに、ディレクトリ名にタイプミスをしないことができますプラス最初の溶液で、あなたは一度、すべてのパスを指定し、簡単になど、あなたがIDEから作業しても、このソリューションを使用することができます
コリンHebert 2010年

8
プロファイルソリューションの問題は、ターゲットディレクトリを変更するためのユースケースの多くがユーザー固有であり(RAMディスクにビルドする場合など)、pomに属していないことです。ユーザー固有のsettings.xmlのプロファイルにビルド要素を含めることはできないため、これはオプションではありません。
EricS 2014

私はこの答えが大好きですがsettings.xml、さらに移植性を高めるために、コマンドラインではなくプロファイルをアクティブ化できることを含めてください。
ローグ

1
デフォルトの$ {project.basedir} / targetを指すEclipseを邪魔することなく、代替ディレクトリのコマンドラインでビルドできるため、「推奨されないソリューション」が気に入っています。したがって、Eclipseが更新/再構築されるのを待たずに、コマンドラインで同時にビルドしながらEclipseでコーディングできます
Francois Marot 2017年

28

コリンは、プロファイルを使用する必要があることは正しいです。ただし、彼の答えは、プロファイル内のターゲットディレクトリをハードコードしています。別の解決策は、次のようなプロファイルを追加することです。

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

また、これはどのような利点を提供しますか?私はおそらく何かが足りないのですが、OPの「cases」がコマンドラインで指定されていると仮定すると、これはパラメータを他のプロパティ-Dalt.build.dir=~/mytargetに使用するのと同等にするだけではないでしょう-Dか?
Michael Scheper 2013

ああ、ここにいる全員が、settings.xmlではなく、POMにプロファイルを追加することについて話していることに気づきました。それは私の質問を少なくともn00bと同じくらいm00tにするでしょう。申し訳ありません。
Michael Scheper 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.