2010-01-29 657 views
14

我有一个在Windows环境下开发的应用程序。应用程序本身被部署到Linux环境中。每次我部署这个应用程序,我都必须使用dos2unix将可执行文件转换为UNIX格式。我原本以为这是由Windows CP1252编码引起的,所以我更新了Maven以将文件编码为UTF-8。这并没有解决我的问题,我很快发现,这与搜索本网站的回车和换行有关。有没有办法让Maven在构建过程中将所有文件转换为UNIX格式?我使用Maven 2.2.1和Java 5使用Maven将文件转换为UNIX格式

回答

14

您可以使用Maven插件antrun调用fixcrlf ant任务:

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>ant-test</groupId> 
    <artifactId>ant-test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>ant-test</id> 
         <phase>package</phase> 
         <configuration> 
          <tasks> 
           <fixcrlf ... /> 
          </tasks> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+1

我试图,这似乎正在工作。我也在使用maven assembly插件,现在由于这种转换,读取jar文件时出现问题。关于如何让它在Windows机器上构建的任何想法? – 2010-01-29 14:23:26

+1

您可能想要添加包含或排除属性,因此您只更改* .txt或您要修改的任何资源 – Kevin 2010-01-29 14:40:42

+0

谢谢,包含/排除工作。它修改了我的源代码目录中的文件,如果需要的话,这些文件可以正常运行,但是有没有什么办法让Maven组件插件在构建时运行这个ant任务,这样我就不必恢复或检查在我的文件? – 2010-01-29 14:48:20

35

Assembly插件有一个lineEnding选项,它可以用来控制对于给定的fileSet,文件的行结束。这个参数恰好在那里做你想做的。最终,您可以使用带有LF行的CRLF行和tar.gz归档文件构建zip归档文件。

E.g.

... 
<fileSet> 
    <directory>${basedir}/src/main/build/QA</directory> 
    <outputDirectory>/bin</outputDirectory> 
    <includes> 
     <include>start.sh</include> 
    </includes> 
    <lineEnding>unix</lineEnding> 
</fileSet> 
... 

在这个时候可能值包括:

  • “保存” - 保存所有行结束
  • “UNIX” - 使用Unix风格的行尾(即 “\ n”)
  • “LF” - 使用单一换行符行尾(即 “\ n”)
  • “杜斯” - 使用DOS-/Windows风格的行尾(即 “\ r \ n”)
  • “窗口“ - 使用DOS-/Windows风格的线条结尾(即为 “\ r \ n” 个)
  • “CRLF” - 使用回车,换行的行结尾(即, “\ r \ n” 个)