在maven程序集中复制文件
Copy file in maven assembly
我正在构建一个 Maven 程序集。结构是这样的:
src
main
server
app1
app2
app3
client
app1
app2
app3
common
server.xml
程序集使输出为:
server.zip
app1
app2
app3
我想在应用程序的每个输出文件夹中包含 server.xml
。所以我的输出应该是:
server.zip
app1
server.xml
app2
server.xml
app3
server.xml
我该怎么做?
您需要多次复制文件 server.xml
,方法是在 assembly.xml
中多次声明它。这是一个示例程序集描述符:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>server</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/server/app1</directory>
<outputDirectory>app1</outputDirectory>
</fileSet>
</fileSets>
<files>
<file>
<source>src/main/common/server.xml</source>
<outputDirectory>app1</outputDirectory>
</file>
</files>
<!-- same configuration for app2 and 3 -->
</assembly>
如果您想循环执行此操作(假设您有 50 个应用程序文件夹),可以使用 Velocity template. Invoking Velocity is done with the velocity-maven-plugin
.
生成正确的 Maven 程序集描述符
样本速度模板(另存为src/main/common/assembly-server.xml.vm
):
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>server</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
#foreach($i in [1..50])
<fileSet>
<directory>src/main/server/app$i</directory>
<outputDirectory>app$i</outputDirectory>
</fileSet>
#end
</fileSets>
<files>
#foreach($i in [1..50])
<file>
<source>src/main/common/server.xml</source>
<outputDirectory>app$i</outputDirectory>
</file>
#end
</files>
</assembly>
插件配置:
<plugin>
<groupId>com.googlecode.velocity-maven-plugin</groupId>
<artifactId>velocity-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>generate-server-assembly<id>
<phase>generate-resources</phase>
<goals>
<goal>velocity</goal>
<goals>
<execution>
</executions>
<configuration>
<templateFiles>
<directory>/src/main/common</directory>
<includes>
<include>assembly-server.xml.vm</include>
</includes>
</templateFiles>
<removeExtension>.vm</removeExtension>
</configuration>
</plugin>
这将在 target
下生成一个 assembly-server.xml
文件,您可以将其用作 maven-assembly-plugin
.
的程序集描述符
我正在构建一个 Maven 程序集。结构是这样的:
src
main
server
app1
app2
app3
client
app1
app2
app3
common
server.xml
程序集使输出为:
server.zip
app1
app2
app3
我想在应用程序的每个输出文件夹中包含 server.xml
。所以我的输出应该是:
server.zip
app1
server.xml
app2
server.xml
app3
server.xml
我该怎么做?
您需要多次复制文件 server.xml
,方法是在 assembly.xml
中多次声明它。这是一个示例程序集描述符:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>server</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/server/app1</directory>
<outputDirectory>app1</outputDirectory>
</fileSet>
</fileSets>
<files>
<file>
<source>src/main/common/server.xml</source>
<outputDirectory>app1</outputDirectory>
</file>
</files>
<!-- same configuration for app2 and 3 -->
</assembly>
如果您想循环执行此操作(假设您有 50 个应用程序文件夹),可以使用 Velocity template. Invoking Velocity is done with the velocity-maven-plugin
.
样本速度模板(另存为src/main/common/assembly-server.xml.vm
):
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>server</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
#foreach($i in [1..50])
<fileSet>
<directory>src/main/server/app$i</directory>
<outputDirectory>app$i</outputDirectory>
</fileSet>
#end
</fileSets>
<files>
#foreach($i in [1..50])
<file>
<source>src/main/common/server.xml</source>
<outputDirectory>app$i</outputDirectory>
</file>
#end
</files>
</assembly>
插件配置:
<plugin>
<groupId>com.googlecode.velocity-maven-plugin</groupId>
<artifactId>velocity-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>generate-server-assembly<id>
<phase>generate-resources</phase>
<goals>
<goal>velocity</goal>
<goals>
<execution>
</executions>
<configuration>
<templateFiles>
<directory>/src/main/common</directory>
<includes>
<include>assembly-server.xml.vm</include>
</includes>
</templateFiles>
<removeExtension>.vm</removeExtension>
</configuration>
</plugin>
这将在 target
下生成一个 assembly-server.xml
文件,您可以将其用作 maven-assembly-plugin
.