Переименование ресурсов в Maven
Я пытаюсь найти способ скопировать файл ресурса с новым именем в целевой каталог в сборке Maven. Почти все, что я нашел во время поиска, предлагает обходные пути, включающие несколько подкаталогов в /src/main/resources
и выбирая среди них через профили. Однако в моем случае это не решает проблему, а именно то, что файл, который я хочу, имеет "волшебное" имя.
В основном то, что я хочу сделать, это иметь /src/main/resources/default.DS_Store
файл копируется в ${project.build.directory}/.DS_Store
, Так как .DS_Store
Файл имеет особое значение в Mac OSX, нежелательно иметь файл с таким именем как в исходном дереве, так и в управлении версиями. Тем не менее, я хочу, чтобы данные в файле находились в дереве исходного кода и в управлении версиями, и чтобы они переименовывались в "волшебное" имя во время сборки.
Я начинаю думать, что муравей - единственный способ сделать это автоматически. Есть ли более простой способ?
5 ответов
Я вижу 2 варианта решения вашей проблемы:
- Используйте Maven-Ant-Plugin и определите задачу переименования Ant, которая будет переименовывать ваш файл только на этапе упаковки, в каталоге сборки.
- Используйте этот специальный плагин Maven (я его не тестировал): http://code.google.com/p/maven-file-rename-plugin/
Использование antrun-maven-plugin делает это легко, но если вы ищете более мавританский способ, который поддерживается в 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/
Пример использования плагина сборки для копирования и / или переименования файла:
файл 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>
У меня была та же проблема с использованием copy-rename-maven-plugin.
<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>
Вы можете избежать накладных расходов Ant, используя подключаемый модуль сборки Maven и дескриптор сборки файла.