CodeGym /Java 课程 /模块 3 /在构建 Maven 项目时管理文件

在构建 Maven 项目时管理文件

模块 3
第 2 级 , 课程 1
可用

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>为真。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION