2016-04-11 13 views
0

以下は私のプロジェクト構造です。私はプロパティを読み取るとで同じに置換するプラグインのmaven-読みプロパティを使用しようとしましたMaven Readプロパティプラグインは依存関係の値を代用しません

spring-version=3.1.0.RELEASE 

test-proj 
    |_ src 
    |_main 
    | |_java 
    |_test 
     |_java 
    |_prop.properties 
    |_pom.xml 

そして、私のpom.xml

<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>com.sample</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
     <!-- The resources tag will be used if prop file is under src location. --> 
    <!-- <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> --> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>properties-maven-plugin</artifactId> 
       <version>1.0.0</version> 
       <executions> 
        <execution> 
         <phase>initialize</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>${basedir}/prop.properties</file> 
          </files> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${spring-version}</version> 
     </dependency> 
    </dependencies> 
</project> 

Prop.propertiesファイルがあり春バージョンの場所。しかし、org.springframeworkの 'dependencies.dependency.version'というエラーが発生します。spring-beans:jarは有効なバージョンでなければなりませんが、 '$ {spring-version}'です。

私はMaven実行フェーズでinitializeではなくvalidateフェーズを使用しようとしました。しかし、まだ問題は残っています。コンテキストパスの代わりに、プロパティファイルの場所をD:\ test-proj \ prop.propertiesという絶対パスに置き換えようとしましたが、どちらもそれを助けませんでした。私はmavenコンパイラプラグインバージョン2.3.2を使用しています。何か不足していますか?他のプラグインでも依存関係のバージョンを置き換えることが可能かどうかを教えてください。

注:私はすべての私のプロジェクトは、モジュール化されて親子ポンポンの関係を使用することはできません、彼らはあなたが関係のない複数のプロジェクトのシェアの依存性バージョンが必要な場合は、使用することができ、同じ親

+0

はBASEDIRフォルダに本当にあなたの特性です:すべてによって継承され、これのすべてのプロジェクトの両親のチャイルズを作ることが適切な設定(S)が含まれていsuper-parent POMを確立しますか? basedirはプロジェクトのルートフォルダ、つまりpom.xmlファイルが存在する場所を表します。あなたのプロパティはおそらくリソースフォルダにあると思いますよね? – dambros

+0

@dambros私はそれをリソースと同様にルートディレクトリに置こうとしました。ご覧のように、prop.propertiesの現在の場所は、pom.xmlが利用可能なルートフォルダです。$ {basedir.properties} /prop.propertiesとして参照しています – Poppy

+0

pom内の依存関係のバージョンを宣言しない特別な理由自体?それは余計に思われるので、ここでプラグインの使用を理解しようとしています – dambros

答えて

0

に依存しません材料の概念のビルがhttp://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/

  1. 梱包ポンポンとは無関係のBOMプロジェクトを作成します。プロジェクト
  2. に共有依存関係を追加し、各BOMプロジェクトの下

をインポートする必要があり、あなたのプロジェクトは、例のページからの抜粋です

BOM依存[部品表]を追加する方法

Mavenは、この目的のためにタグ依存関係管理を提供します。このタグにbom情報を追加する必要があります。私は春のBOMファイルの例を取っ​​ています。 AnはBOMを使用する利点を追加

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-framework-bom</artifactId> 
     <version>4.0.1.RELEASE</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

は、春のフレームワークの成果物に依存するとき、あなたは、もはやバージョン属性を指定する必要があることではありません。だからそれは完璧に正常に動作します。

<dependencies> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
</dependency> 

+0

私はそれが正しいことを得ていないと恐れています。私の理解によれば、依存関係管理は理想的には親pomで定義され、 – Poppy

+0

@Poppy in my proposal依存関係管理セクションは、各プロジェクトに独立して定義する必要がありますが、単一エントリ(単一のBOM)には、Spring、sql、バージョン付きのapache-commonsに対する数十の依存関係が含まれることがあります) – michaldo

0

私はこれが仕事に行くされていることを想像することはできません。 AFAIU Mavenは、実行の前に依存関係を解決しなければなりません。これは、実行のための適切なクラスパスをどのように作成する必要があるからですか?

日時:

私はすべての私のプロジェクトは、モジュール式であり、彼らは同じ親に依存しないよう、親子ポンポンの関係を使用することはできません。

あなたはできると思います。

+- super-parent 
    +- pom.xml ... containing setting(s) for all 
    +- parent-project-1 
    +- ... 
    +- parent-project-2 
    +- ... 
    +- ...