在pom.xml中指定换行符

时间:2017-01-27 16:45:37

标签: java maven newline pom.xml

我需要使用项目的dependency-jars生成一个文件。 这可以使用dependeny插件完成。 请参阅以下pom的片段:

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

但是,由于我需要在单独的一行上使用每个jar,因此我尝试将pathSeparator指定为换行符。但是,这不起作用。我没有找到在pom中指定换行符的有用方法。

关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:2)

Maven正在修剪您的<pathSeparator>值,这会导致空值,因为行分隔符被视为空格。然后,由于没有值,Maven回退到使用默认值。我没有看到任何解决此问题的简单方法。

还有其他一些选择。您可以考虑使用dependency:list目标:

<强>的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

这是Maven工件ID而不是jar文件名。可以说,这实际上更有价值,因为输出不会在运行构建的不同机器上发生变化。 (jar文件将使用绝对路径,在不同的机器上可能会有所不同。)

如果真的必须是jar文件名而不是Maven工件ID,那么你可以通过在<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阶段生成此文件,然后使用maven-resources-pluginprocess-resources阶段执行令牌替换。

最后,如果您只是需要此信息用于文档目的,请考虑使用maven-project-info-reports-plugin提供的站点文档。

答案 1 :(得分:1)

在XML中,您可以使用以下转义序列 - &#x0A;

来指定换行符

不幸的是,正如您已经提到的,<pathSeparator>值会被修剪掉所有前导和尾随空格,从而导致空字符串值导致插件使用其默认值。

但是,您可以在同一阶段使用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>