当前位置: 首页 > 知识库问答 >
问题:

执行没有继承的Maven3 exec插件

仲孙德惠
2023-03-14

我有一个多模块maven java项目,我想在其中执行exec插件,以便在创建JAR后执行自定义命令。

我在父POM上调用maven包汇编:汇编exec:exec来创建项目输出。

我在父POM中使用了以下内容:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <configuration>
            <executable>myExecutable.exe</executable>
            <workingDirectory>${basedir}</workingDirectory>
            <arguments>....</arguments>
        </configuration>
    </plugin>

执行此操作时,我的可执行文件得到了正确执行,但也对每个子模块执行。

为了尝试修复它,我将插件设置为不继承子模块:

<inherited>false</inherited>

但是现在exec插件失败,目标org.codehaus.mojo: exec-maven-plugin: 1.2.1: exec的参数“可执行文件”丢失或无效。

我尝试将插件设置为在“executions”元素下运行,并将其分配给maven生命周期阶段。这导致可执行文件成功运行,但我无法这样做,因为我需要在执行这个exec插件之前执行其他插件(汇编插件)。

如何在包阶段完成后运行此(exec)插件一次,而另一个插件(组件)也已完成?

换句话说,我希望为所有子模块执行“package”,然后从父模块只执行一次exec插件。

我将感谢任何帮助。

共有2个答案

卞嘉许
2023-03-14

这将跳过先前配置的执行的继承:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </pluginManagement>
  ...
</build>
邵绪
2023-03-14

当您在父POM级别运行命令时,您告诉Maven为每个模块调用生命周期的该部分。

如果您只想为子模块调用exec: exec,您应该仅为子模块声明该插件(因为它对继承父模块的其他模块没有任何意义),并通过--project-pl调用Maven>参数:

mvn-pl子包汇编:汇编exec:exec

当从父项目执行此命令时,仅对子项目执行包assembly:assembly exec:exec。

但是,如果您真正想要完成的是,您可以在一个命令中打包所有模块,并且希望在打包阶段为该子模块执行assembly:assemblyexec:exec目标,那么您需要将这些插件绑定到该阶段。例如:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
        <executable>myExecutable.exe</executable>
        <workingDirectory>${basedir}</workingDirectory>
        <arguments>....</arguments>
    </configuration>
    <executions>
        <!-- run the exec goal of this plugin every time this module is packaged -->
        <execution>
            <phase>package</phase>
            <goals><goal>exec</goal></goals>
        </execution>
    </executions>
</plugin>
 类似资料:
  • 问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预

  • 我在Java实践继承,面临以下问题: 父类的代码: 子类代码: 两者是分开的。java文件。当我尝试执行父类文件时,它可以工作,但由于某些原因,我甚至无法运行子类。这里有以下信息: 该文件于2月8日发布。java不是可执行的。请选择要运行的主类 我该如何解决这个问题?

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 本文向大家介绍C/C++ 公有继承、保护继承和私有继承的对比详解,包括了C/C++ 公有继承、保护继承和私有继承的对比详解的使用技巧和注意事项,需要的朋友参考一下 C/C++ 公有继承、保护继承和私有继承的区别    在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类

  • 问题内容: 我正在尝试使用像这样的静态块: 我有一个叫做 和派生类: 我的功能是这样的: 这按我的预期打印输出。有人可以解释这种行为吗?另外,如果我希望派生类为静态变量设置值,该如何实现? 问题答案: 我认为。您不调用任何属性(属于,不属于)。而且Java没有从运行静态块。如果向其中添加一些静态字段并对其进行访问,则Java将执行所有静态块。 根据Java规范,当类初始化时(并执行了静态块): 1

  • 本文向大家介绍详解C++编程中的私有继承和公有继承,包括了详解C++编程中的私有继承和公有继承的使用技巧和注意事项,需要的朋友参考一下 C++类的私有继承 在声明一个派生类时将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class ), 其基类称为私有基类(private base class )。 私有基类的公用成