2.1 maven-resources-plugin复制资源插件
如果您正在构建 Web 应用程序,那么您将在其中拥有一堆不同的资源。这些是 jar 库、jsp servlet 和设置文件。当然,这是一堆html
, css
,之类的静态文件js
,还有各种图片。
默认情况下,在构建项目时,Maven 会简单地将所有文件从文件夹复制src/main/resources
到目标目录。如果您想更改此行为,那么该插件会帮助您maven-resources-plugin
。
此类插件的示例代码:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
该插件将在验证阶段调用。使用该标签,<outputDirectory>
您可以设置插件复制<resources>
. 这就是插件可以发挥最大作用的地方。
2.2 使用 maven-resources-plugin 过滤资源
插件资源不仅可以以文件的形式指定,还可以立即以目录的形式指定。此外,可以向目录添加一个掩码,指定该目录中的哪些文件将包含在该资源中。
例子:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
两个星号作为掩码代表任意数量的目录。在上面的示例中,目录src/main/resources/images
(及其子目录)中包含的所有 png 文件都将作为资源数据。
如果你想排除一些文件,你可以使用exclude
. 例子:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
标签按顺序应用:首先,包含文件中指定的包含文件将被添加到资源中,然后排除文件将从该列表中排除。
但这还不是全部。该插件可以查看文件内部(当然,如果它们是文本)。并且,例如,将application.properties
所需版本的程序集添加到文件中。为了让插件处理文件的内容,您需要指定参数<filtering>true</filtering>
.
例子:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
有关此插件的更多详细信息,请访问以下链接: https: //maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 maven-source-plugin源码包含插件
另一个有用的插件 -maven-source-plugin
允许您在程序集中包含 java 文件的源代码。为了什么?
问题在于,除了 Web 应用程序之外,还有大量的库是使用 Maven 组装的。许多 Java 项目遵循开源的概念,并以自己的源代码分发到 Java 社区。
为什么需要一个单独的插件?为什么你不能只复制源代码,仅此而已?
首先,在任何复杂的项目中,源代码都可以存储在多个地方。
其次,经常使用基于xml规范的源码生成,这样的源码也需要包含在程序集中。
第三,您可以决定不在程序集中包含任何特别机密的文件。
使用 maven-source-plugin 插件的例子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 maven-dependency-plugin依赖复制插件
在构建项目时,您可能还需要巧妙地复制依赖项(库)。为此使用了一个插件maven-dependency-plugin
。
例子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
在此示例中,写入了插件的默认行为 - 将库复制到${project.build.directory}/lib
.
执行部分说明插件将在构建阶段调用 - 包、目标 - 复制依赖项。
一般来说,这个插件有相当多的目标,这里是最流行的:
1个 | 依赖:分析 | 依赖性分析(使用过、未使用过、指定过、未指定过) |
2个 | 依赖:分析重复 | 识别重复依赖 |
3个 | 依赖:解决 | 所有依赖项的解析(定义) |
4个 | 依赖:解决插件 | 所有插件的权限(定义) |
5个 | 依赖:树 | 显示依赖树 |
您还可以在配置部分设置其他参数:
1个 | 输出目录 | 将复制依赖项的目录 |
2个 | 覆盖发布 | 创建发布时覆盖依赖项的标志 |
3个 | 覆盖快照 | 标记以覆盖具有 SNAPSHOT 的非终端依赖项 |
4个 | overWriteIfNewer | 标记以用较新版本覆盖库 |
例子:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
默认情况下<overWriteReleases>
,and<overWriteSnapshots>
为假,for<overWriteIfNewer>
为真。
GO TO FULL VERSION