12

我对Maven很陌生...

我要做的是在部署阶段跳过 maven-deploy-plugin,同时用我自己的插件替换它(即我正在部署到非存储库位置)。

我意识到我可以通过多种其他方式做到这一点,但老板希望能够运行:

mvn 部署

要获得我当前解决方法的结果,即禁用 maven-deploy-plugin(这似乎正在禁用整个部署阶段),并从命令行手动指定自定义上传目标。

我目前未能成功完成以下任务:

<executions>
    <execution>
        <phase>deploy</phase>
    </execution>
</executions>

在包含我的插件规范的 build/plugins/plugin 部分中,因为部署阶段被跳过:

        <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>

谢谢!

4

3 回答 3

18

禁用 maven-deploy-plugin (这似乎禁用了整个部署阶段)

这是不正确的。禁用maven-deploy-plugin不会禁用整个部署阶段。这是应该如何完成的(看起来你已经这样做了):

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
            <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
</build>
于 2012-10-08T07:17:22.753 回答
9

试试这个(未经测试的)替代方法来禁用标准部署插件:

<plugin>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.7</version>
    <executions>
        <execution>
            <id>default-deploy</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>
于 2012-10-05T18:52:36.883 回答
1

我想在@yegor256 的回答的基础上再做一点…… 8 年零 4 个月后!

我发现自己在这里陷入了一些遗留的 Maven 配置的杂草中,这些配置充满了cruft。来自 Maven 的思维模式,尽管从现在到积极的黑客攻击已经有几年了,但我正在重新熟悉 Maven 生命周期。

TLDR……mvn help:effective-pom是你的朋友。经常使用 IDE 的工具查看有效的 POM(NetBeans 使这变得容易。我在 IntelliJ 中添加了一个键盘快捷键。)

在我正在审查的配置中,以前的开发人员创建了两 (2) 个deploy-file执行,一war、一jar

<build>
...
  <plugins>
  ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.8.2</version>
      <executions>
        <execution>
          <id>deploy-war</id>
          <phase>deploy</phase>
          <goals>
            <goal>deploy-file</goal>
          </goals>
          <configuration>
            ... omitted ...
          </configuration>
        </execution>
        <execution>
          <id>deploy-jar</id>
          <phase>deploy</phase>
          <goals>
            <goal>deploy-file</goal>
          </goals>
          <configuration>
            ... omitted ...
          </configuration>
        </execution>
      </executions>
    </plugin>
  ...
  </plugins>
...
</build>

我知道这些执行将附加到阶段的default-deploy绑定,deploy并在日志中观察到这种行为。将default-deploy运行,上传一个空的战争文件,然后deploy-war将运行,上传并覆盖第一个战争文件。

存在几个选项。

skipcombine.self="override"(我的偏好)

如前所述,<skip>作为一个<configuration>选项使用是可行的。<phase>它比设置设置为更安全且更便携none

但是,它将被其他执行继承(当然如介绍的那样)。为了防止这种情况,您必须明确告诉您的其他<execution>配置不要继承

...
...
      <executions>
        <execution>
          <id>deploy-war</id>
          <phase>deploy</phase>
          <goals>
            <goal>deploy-file</goal>
          </goals>
          <configuration combine.self="override">
            ... omitted ...
          </configuration>
        </execution>
...
...

覆盖default-deploy

combine.self="override"另一种选择,可能比覆盖default-deploy <id>插件的执行更冗长且更不深奥。

...
        <execution>
          <id>default-deploy</id>
          <configuration>
            <skip>true</skip>
          </configuration>
        </execution>
...

这不会被附加的<executions>.

另外的选择

正如@yegor256 所指出的,但在附加配置中明确声明要“重置”从插件<skip>false</skip>继承的。<skip>

HTH。

于 2021-02-08T04:01:03.673 回答