如何在 Maven 项目的命令行中禁用 jar 创建?

Posted

技术标签:

【中文标题】如何在 Maven 项目的命令行中禁用 jar 创建?【英文标题】:How to disable jar creation in commandline in a maven project? 【发布时间】:2016-10-09 22:19:00 【问题描述】:

我有一个 maven 项目,我正在为其运行两个单独的构建。

在一个构建中,我想通过禁用其中的 Maven 模块的 jar 创建来节省构建时间。(有 45 个 Maven 模块)。有一个 Maven-Jar-Plugin 用于创建 jars。

我想在命令行有条件地禁用 jar 创建,即寻找类似于 -Dskiptests 的东西,用于跳过单元测试,尽管默认情况下有一个万能插件。

【问题讨论】:

【参考方案1】:

maven-jar-plugindoes not provide 任何跳过选项。

但是,有几种方法可以实现您的要求。

你可以跳过phase,它默认带来(via default mappings)jar创建,即package阶段,因此只需调用

mvn clean test

如果您不创建 jar 文件,附加阶段将毫无意义:packageinstalldeploy 将没有任何要处理的内容。此外,其他集成阶段也可能会受到影响,具体取决于您的集成测试策略(如果有)。

或者,您可以按以下方式配置您的 pom:

<properties>
    <jar.creation>package</jar.creation>
</properties>

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>$jar.creation</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>

因此,默认行为仍会提供 jar 创建,同时执行 maven,如下所示:

mvn clean install -Djar.creation=false

将跳过创建 jar。

我们实际上在做什么:

我们正在重新定义maven-jar-plugin 的默认执行 我们正在覆盖它的执行 ID,从而获得对它的更多控制 我们将其执行阶段绑定到可配置(通过属性)阶段 默认阶段(属性值)继续为package 在命令行时,您仍然可以将其更改为不同于标准 maven 阶段的任何值。也就是说,-Djar.creation=none 也可以。

【讨论】:

@Priyanka.Patil 这个答案有用吗?你没有分享任何进一步的反馈,也没有accept。只是检查。

以上是关于如何在 Maven 项目的命令行中禁用 jar 创建?的主要内容,如果未能解决你的问题,请参考以下文章

在命令行中使用 maven 编译整个项目后如何运行单个类? [复制]

SpringBoot项目jar包命令行部署运行时提示“没有主清单属性”问题

在命令行中执行 flyway 回调

如何把jar包生成maven工程

当我尝试运行刚创建的jar文件时出现Maven错误“无法初始化主类”

maven项目打成jar包 出错。