Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Renaming resources in Maven

Tags:

maven-2

I am trying to find a way to copy a resource file to a new name in the target directory in a Maven build. Pretty much everything I have found while searching suggests workarounds involving multiple sub-directories in /src/main/resources and selecting among them via profiles. However, in my case, this does not solve the problem, namely that the file I want has a "magic" name.

Basically what I want to do is have a /src/main/resources/default.DS_Store file get copied to ${project.build.directory}/.DS_Store. Since the .DS_Store file has special meaning in Mac OSX, it is not desirable to have a file with that name in the source tree, and in version control. However, I do want the data in the file to be in the source tree and version control, and have it renamed to the "magic" name during the build.

I'm starting to think that ant is the only way to do this automatically. Is there any easier way?

like image 993
wmorrell Avatar asked Oct 22 '10 15:10

wmorrell


People also ask

How do you rename a Maven file?

Use the Maven-Ant-Plugin, and define an Ant rename task that will rename your file only at the packaging phase, in the build directory.

What is Maven resource filtering?

Resource Filtering. You can use Maven to perform variable replacement on project resources. When resource filtering is activated, Maven will scan resources for property references surrounded by ${ and }.

What is a Maven assembly?

The Assembly Plugin for Maven enables developers to combine project output into a single distributable archive that also contains dependencies, modules, site documentation, and other files. Your project can easily build distribution "assemblies" using one of the prefabricated assembly descriptors.


2 Answers

Using the antrun-maven-plugin makes it easy, but in case you are looking for a more mavenish way which is supported within eclipse m2e, then you can use the 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> 

And in case you have any feedback/issues with the plugin, you can reach out at https://github.com/coderplus/copy-rename-maven-plugin/

like image 93
coderplus Avatar answered Oct 06 '22 05:10

coderplus


Example usage of the assembly plugin to copy and/or rename a file:

pom file:

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

Descriptor file:

<?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> 
like image 24
rob2universe Avatar answered Oct 06 '22 05:10

rob2universe