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

基于操作系统的Maven antrun插件集属性

乔丁雨
2023-03-14

我正在将一个ant脚本转换成Maven,并决定使用Maven ant run插件。我走在好的路上,但是我遇到了下面的问题。Ant源脚本使用如下目标定义:

<condition property="isWindows">
  <os family="windows"/>
</condition>
<condition property="isUnix">
  <os family="unix"/>
</condition>


<target name="init-windows" depends="" if="isWindows">
  <property file="${user.home}/abc.properties"/>
</target>

<target name="init-unix" depends="" if="isUnix">
 <property name="abc.home" value="${env.ABC_HOME}"/>
</target>

关键是要使用属性值

abc.home

在构建周期的后期,这取决于操作系统(Win、Linux)。在ant脚本中,这是可以的,但是maven ant run插件不支持使用多个目标。我不想使用Maven配置文件标记。如果有,我想使用ant标签?有人有暗示吗?

共有1个答案

钱旻
2023-03-14

我认为一个更简单的解决方案是不使用maven-antrun-plugin而是使用配置文件。

配置文件是根据某些激活属性具有不同属性的好方法。其中一个激活属性可以是运行构建的OS。

考虑以下POM:

<profiles>
  <profile>
    <id>windows</id>
    <activation>
      <os>
        <family>windows</family>
      </os>
    </activation>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
          <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>${user.home}/abc.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </profile>
  <profile>
    <id>unix</id>
    <activation>
      <os>
        <family>unix</family>
      </os>
    </activation>
    <properties>
        <abc.home>${env.ABC_HOME}</abc.home>
    <properties>
  </profile>
</profiles>
  • 在 Windows 计算机上运行时,Windows 配置文件将被激活。读取属性文件是使用属性-maven-插件完成的,其内容将被放置在属性中,就像Ant一样

然后,在您的Maven构建中,您可以使用< code>${abc.home},而不必担心您在哪个概要文件中。

话虽如此,另一种解决方案是运行maven-antrun-plugin的多次执行。在第一次执行中,您决定构建是在 Windows 计算机还是 Unix 计算机中运行,然后相应地跳过以下执行。这将是一个示例配置,其中 myPhase 将是您希望它运行的阶段。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <phase>myphase</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <condition property="isWindows">
                        <os family="windows" />
                    </condition>
                    <condition property="isUnix">
                        <os family="unix" />
                    </condition>
                </target>
                <exportAntProperties>true</exportAntProperties>
            </configuration>
        </execution>
        <execution>
            <phase>myphase</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target name="init-windows" depends="">
                    <property file="${user.home}/abc.properties" />
                </target>
                <exportAntProperties>true</exportAntProperties>
                <skip>${isUnix}</skip>
            </configuration>
        </execution>
        <execution>
            <phase>myphase</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target name="init-unix" depends="">
                    <property name="abc.home" value="${env.ABC_HOME}" />
                </target>
                <exportAntProperties>true</exportAntProperties>
                <skip>${isWindows}</skip>
            </configuration>
        </execution>
    </executions>
</plugin>
 类似资料:
  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成

  • 问题内容: 我想用C ++编写一个包含系统调用的跨平台函数。我可以检查哪些条件编译标志来确定要为其编译代码的操作系统?我对使用Visual Studio和GCC的Windows和Linux感兴趣。 我认为应该看起来像这样: 问题答案: 我的gcc(4.3.3)定义了以下与Linux相关的预定义宏: 在VC ++(和许多其他Win32编译器)下,还有几个用于标识平台的预定义宏,最著名的是_WIN32

  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断与系统调用 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 由计算机硬件异常或故障引起的中断,称为内部异常中断; 由程序中执行了引起中断

  • 前言 准备了很久,找了好多天资料,还不知道应该如何动笔写:因为担心拿捏不住,所以一方面继续查找资料,一方面思考如何来写。作为《Shell编程范例》的一部分,希望它能够很好地帮助 Shell 程序员理解如何用 Shell 命令来完成和 Linux 系统关系非常大的文件系统的各种操作,希望让 Shell 程序员中对文件系统"混沌"的状态从此消失,希望文件系统以一种更为清晰的样子呈现在眼前。 文件系统在

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的

  • 进程与线程 对于有线程系统: 进程是资源分配的独立单位 线程是资源调度的独立单位 对于无线程系统: 进程是资源调度、分配的独立单位 进程之间的通信方式以及优缺点 管道(PIPE) 有名管道:一种半双工的通信方式,它允许无亲缘关系进程间的通信 优点:可以实现任意关系的进程间的通信 缺点: 长期存于系统中,使用不当容易出错 缓冲区有限 无名管道:一种半双工的通信方式,只能在具有亲缘关系的进程间使用(父