2010-10-22 79 views
37

我正試圖找到一種方法將資源文件複製到Maven構建中的目標目錄中的新名稱。幾乎所有我在搜索時發現的東西都提示/src/main/resources中涉及多個子目錄的解決方法,並通過配置文件在其中進行選擇。然而,就我而言,這並不能解決問題,即我想要的文件有一個「神奇」的名字。在Maven中重命名資源

基本上我想要做的是將/src/main/resources/default.DS_Store文件複製到${project.build.directory}/.DS_Store。由於.DS_Store文件在Mac OSX中有特殊含義,因此在源代碼樹和版本控制中使用具有該名稱的文件是不可取的。但是,我確實希望文件中的數據位於源代碼樹和版本控制中,並在構建期間將其重命名爲「魔術」名稱。

我開始認爲螞蟻是自動執行此操作的唯一方法。有沒有更簡單的方法?

+0

http://maven.apache.org/plugins/maven-resources-plugin/這可能對你有所幫助, – 2010-10-22 15:57:15

+5

資源插件不允許重命名。這是我的問題。 – wmorrell 2010-10-22 16:05:54

+0

你也可以看看http://maven.apache.org/plugins/maven-assembly-plugin/。但我不確定你可以重命名文件:我從來沒有這樣使用過這個插件。 – 2010-10-22 16:06:14

回答

15

我看到2個選項來解決問題:

+2

我使用antrun插件,在準備包階段執行一次執行以創建重命名的'.DS_Store',另一次在驗證階段刪除它(以防萬一...)。看起來像在工作,謝謝! – wmorrell 2010-10-22 17:16:20

12

您可以通過使用Maven Assembly pluginfile assembly descriptor避免螞蟻的頭頂。組裝插件

+0

不受文件集支持。所以你不能應用一個模式:( – BeepDog 2011-09-01 16:34:36

+0

文件重命名可以在assembly插件中用dependencySets完成。 – mojoken 2014-06-04 22:50:50

+7

你能提供一個例子嗎?那裏有很多文檔! – 2014-06-13 15:58:57

14

實施例使用,以複製和/或重命名的文件:

POM文件:

<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>test</groupId> 
    <artifactId>test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2.1</version> 
     <configuration> 
      <descriptors> 
      <descriptor>src/main/descriptors/example.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

描述符文件:

<?xml version="1.0" encoding="UTF-8"?> 
<assembly> 
     <id>example</id> 
     <formats> 
       <format>dir</format> 
     </formats> 
     <files> 
       <file> 
        <source>src/main/resources/something.properties</source> 
        <outputDirectory>/</outputDirectory> 
        <destName>something.properties</destName> 
       </file> 
       <file> 
        <source>src/main/resources/something.properties</source> 
        <outputDirectory>/</outputDirectory> 
        <destName>something_en.properties</destName> 
       </file> 
     </files> 
</assembly> 
+2

不幸的是,似乎不支持通配符*。我希望我能做到像 src/main/resources/*。properties $ {source} -suffix CuongHuyTo 2015-02-02 09:24:25

21

使用antrun-行家-插件使它變得簡單,但是如果你正在尋找一種在eclipse m2e中支持的更爲簡單的方法,那麼你可以使用copy-rename-maven-plugin

<plugin> 
    <groupId>com.coderplus.maven.plugins</groupId> 
    <artifactId>copy-rename-maven-plugin</artifactId> 
    <version>1.0.1</version> 
    <executions> 
     <execution> 
     <id>rename-file</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>rename</goal> 
     </goals> 
     <configuration> 
      <sourceFile>${project.build.outputDirectory}/default.DS_Store</sourceFile> 
      <destinationFile>${project.build.outputDirectory}/.DS_Store</destinationFile> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

而如果您有任何意見/用插件的問題,你可以在https://github.com/coderplus/copy-rename-maven-plugin/

6

伸出我使用複製和重命名 - Maven的插件解決我的問題有同樣的問題

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>com.coderplus.maven.plugins</groupId> 
     <artifactId>copy-rename-maven-plugin</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
      <id>copy-file</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <sourceFile>src/someDirectory/test.environment.properties</sourceFile> 
       <destinationFile>target/someDir/environment.properties</destinationFile> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

@coderplus'之前的答案有什麼區別? – 2016-12-23 22:41:41

+0

我使用複製目標來解決我的使用案例@coderplus做了重命名 – 2017-01-09 12:16:57