2016-10-24 3 views
1

私は、各プロジェクトのpomを混乱させることなく、グローバルレベルでカスタム出力ディレクトリを設定しようとしています。Mavenでグローバルカスタムビルドディレクトリを設定する

私は~/.m2/settings.xmlを作成しました:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
         http://maven.apache.org/xsd/settings-1.0.0.xsd"> 

<profiles> 
    <profile> 
    <id>test-target</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
     <directory>/tmp/test</directory> 
    </build> 
    </profile> 

</profiles> 
</settings> 

私はあなたがそれを行うことができないエラーがmvn clean install

[WARNING] 
[WARNING] Some problems were encountered while building the effective settings 
[WARNING] Unrecognised tag: 'build' (position: START_TAG seen ...</activation>\r\n  <build>... @16:13) @ /home/guest/.m2/settings.xml, line 16, column 13 
[WARNING] 

答えて

1

を実行している取得し、それが意図した動作だが。

設定ファイルでは、<profile>要素は、プロジェクトのPOMで見つけられるすべての要素を持つことができません。 the Settings Referenceから:

The profile element in the settings.xml is a truncated version of the pom.xml profile element. It consists of the activation , repositories , pluginRepositories and properties elements. The profile elements only include these four elements because they concerns themselves with the build system as a whole (which is the role of the settings.xml file), not about individual project object model settings.

これはあなたのエラーを説明する:タグ<build>は、設定では違法です。また、the default value for the build directory${project.basedir}/targetであるため、プロジェクトのベースディレクトリ(POMの場所)を変更して、システムプロパティを使用してコマンドラインから上書きする必要があります。

これはすべて意味があり、それをすることができないのは完全に正常です。プロジェクトビルドディレクトリは、各プロジェクトに固有のもので、特定のプロジェクトのビルド時に作成される一時ファイルが含まれています。このフォルダを複数のプロジェクトと共有することができれば、間もなく、マルチモジュールのMavenプロジェクトでファイルを上書きする際に問題が発生します。 module-amodule-bの2つのモジュールを用意します。同じビルドディレクトリを共有する場合、同じクラスディレクトリ(my-new-build-directory/classes)を共有することになり、2つのモジュールのクラスを含むフォルダが作成されます。そのクラスだけでmodule-aの正しいJARを作成することは今では不可能です。どのように区別されますか?また、モジュールの1つのリソースが、同じテンポラリフォルダ内で終了するため、別のモジュールの1つのリソースを上書きする可能性もあります。

ビルドディレクトリはビルド中のプロジェクトと結びついているため、プロジェクトごとに特定のディレクトリに配置する必要があります。デフォルトでは、MavenはPOMの場所に、各プロジェクトのフォルダtargetの中に配置します。それを上書きしたい場合(そして他のプロジェクトと共有して足を踏んで)、そうすることができますが、プロジェクトのPOMを明示的に変更する必要があります。

+0

私は共有ターゲットが悪い考えであることを知っています。私のスニペットはPOCです。私の意図は、ramdisk上のアーティファクトごとにターゲットディレクトリを作成することでした(プロジェクトディレクトリ外) – mm1

+0

@ mm1あなたができることは、各POMにカスタムMavenプロパティを定義してコマンドラインで上書きすることです(http: /stackoverflow.com/a/3908061/1743880)。あなたはまだPOMを変更する必要があります。 – Tunaki

+0

私はこの解決策を知っていましたが、プロジェクトPOMに触れることなく何かを探しています。 – mm1

関連する問題