2017-01-27 22 views
2

プロジェクトの依存関係ジャーを持つファイルを生成する必要があります。 これはdependenyプラグインで行うことができます。 POMから抜粋以下を参照してください。pom.xmlに改行を指定する

<plugin>     
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.10</version> 
     <execution>    
      <id>list-dependencies</id> 
      <phase>package</phase> 
      <goals>    
      <goal>build-classpath</goal> 
      </goals>    
      <configuration> 
      <prefix></prefix> 
      <outputFile>target/modules-list.txt</outputFile> 
      <pathSeparator>\n</pathSeparator>                              
      </configuration> 
     </execution>   
     </executions>    
    </plugin>     

をしかし、私は別の行に各ジャーを必要とするので、私は改行文字であることをpathSeparatorを指定しようとしました。ただし、これは機能しません。 pomに改行文字を指定する便利な方法が見つかりませんでした。

どのようにこれを達成することができますか?

+0

おそらく、改行を含むCDATAセクションでは、 – Aaron

+0

@Aaronいいえ、それはできません。これは、pomに改行を直接入力するようなものです。そのような空白文字はすべて削除されているようです。改行を入力するために私が見つけた唯一の方法は、実際には役に立たない印刷可能な文字で囲むことです。 – radlan

+0

なぜこれが必要ですか? pathSeparatorは通常、OSがパスを区切るために使用する区切り文字です。 – Tunaki

答えて

0
XMLで

することができます特定の次のエスケープシーケンスを使用して改行文字 - あなたはすでに述べたように、<pathSeparator>値が効果的に引き起こして、空の文字列値で、その結果、すべての先頭と末尾の空白をトリミングされ、&#x0A;

残念ながら、そのデフォルト値を使用するプラグイン。

ただし、同じフェーズでAntタスクを使用して、パス区切り文字を置き換えることができます。例えば。

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>list-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>build-classpath</goal> 
        </goals> 
        <configuration> 
         <prefix></prefix> 
         <outputFile>target/modules-list.txt</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- Replace path separator --> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <configuration> 
         <target> 
          <replace file ="target/modules-list.txt" token="${path.separator}" value="${line.separator}" /> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

<pathSeparator>はもはやあなたの依存関係の設定で定義されていることに注意してください。

+0

これは不幸ではない、それは設計によるものです。この目標は、一般的なファンシーリストではなく、クラスパスとして使用可能なものを構築することを目的としています。 – Tunaki

+0

@俊明私は解決策があなたに受け入れられると思っていますが、副詞の選択はありませんか?私はそれを - * alas *、* unhappily *、* regrettably *、* sadly *のどれに変更するのが好きですか?質問はa *だったので、どうしたらいいのですか?*私はこれをやっていけないのですか?*、答えに集中する理由を説明しました。ラドランの結果はゴールの目的によるものではありません。 'xml:space =" preserve "属性が含まれていない限り、' 'の下にある要素の内容は、デフォルトで切り詰められます。私に拡張の機会を与えてくれてありがとう。 – Frelling

+0

@Frellingあなたの提案がうまくいく間、私はChrisNaurothが説明する方法に行きます。しかし、あなたの助けをまだありがとう。 – radlan

1

Mavenが<pathSeparator>の値をトリミングしているため、行区切り文字が空白とみなされるため、空の値になります。次に、値がないので、Mavenはデフォルトを使用するように戻ります。私はこの動作を回避する簡単な方法はありません。

その他のオプションがいくつかあります。これは、MavenのアーティファクトIDの代わりの瓶である

のpom.xml

<plugin>     
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
    <execution> 
     <id>list-dependencies</id> 
     <phase>package</phase> 
     <goals>    
     <goal>list</goal> 
     </goals>    
     <configuration> 
     <outputFile>target/modules-list.txt</outputFile> 
     </configuration> 
    </execution> 
    </executions> 
</plugin>     

ターゲット/モジュール-list.txtに

The following files have been resolved: 
    org.slf4j:slf4j-log4j12:jar:1.7.10:compile 
    org.hamcrest:hamcrest-core:jar:1.3:test 
    junit:junit:jar:4.11:test 
    log4j:log4j:jar:1.2.17:compile 
    org.slf4j:slf4j-api:jar:1.7.10:compile 
    javax.ws.rs:jsr311-api:jar:1.1.1:compile 
    com.sun.jersey:jersey-server:jar:1.19:compile 
    com.sun.jersey:jersey-core:jar:1.19:compile 

:あなたはdependency:list目標を使用して検討することもできファイル名。おそらく、ビルドを実行している別のマシン間で出力が変化しないので、実際にはより価値があります。 (jarファイルは絶対パスを使用しますが、これは異なるマシン間で異なる場合があります)

MavenアーティファクトIDではなくjarファイル名でなければならない場合は、空白以外の文字<pathSeparator>の値に変換します。これにより、Mavenが値をトリムした後でも、デフォルトのパス区切りをオーバーライドするものが残ります。

のpom.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
    <execution> 
     <id>list-dependencies</id> 
     <phase>package</phase> 
     <goals> 
     <goal>build-classpath</goal> 
     </goals> 
     <configuration> 
     <outputFile>target/modules-list.txt</outputFile> 
     <pathSeparator>_${line.separator}</pathSeparator> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

ターゲット/モジュール-list.txtに

/Users/naurc001/.m2/repository/com/sun/jersey/jersey-core/1.19/jersey-core-1.19.jar_ 
/Users/naurc001/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar_ 
/Users/naurc001/.m2/repository/com/sun/jersey/jersey-server/1.19/jersey-server-1.19.jar_ 
/Users/naurc001/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar_ 
/Users/naurc001/.m2/repository/org/slf4j/slf4j-api/1.7.10/slf4j-api-1.7.10.jar_ 
/Users/naurc001/.m2/repository/org/slf4j/slf4j-log4j12/1.7.10/slf4j-log4j12-1.7.10.jar_ 
/Users/naurc001/.m2/repository/junit/junit/4.11/junit-4.11.jar_ 
/Users/naurc001/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar 

残念ながら、それは最後に醜いアンダースコアであなたを残します。あなたがそれらをきれいにしたい場合は、それらをきれいにする別の構築ステップが必要です。このファイルをgenerate-resourcesフェーズで生成し、process-resourcesフェーズでトークン置換を行うには、maven-resources-pluginを使用します。

最後に、文書化の目的でこの情報が必要な場合は、maven-project-info-reports-pluginで提供されているサイトドキュメントの使用を検討してください。

+0

それは不幸ではない、それは設計による。この目標は、一般的なファンシーリストではなく、クラスパスとして使用可能なものを構築することを目的としています。 – Tunaki

+0

@俊明、ありがとう。あなたが好きではない言葉を削除するように編集しました。 –

+0

@ChrisNaurothこれは文書化のためですが、依然としてjar名が必要です。私は単一のアンダースコアを追加するあなたのアプローチは、最適な解決策だと思います。したがって私はあなたの答えを受け入れています。 – radlan

関連する問題