如何在安装阶段从pom设置环境变量

时间:2014-11-05 09:52:23

标签: maven javafx wix environment-variables pom.xml

我正在使用maven与WIX工具集制作安装程序。我的Wix配置文件'WXS'需要当前的项目目录路径。基本上javafx打包工具拿WXS文件并放入临时文件夹,然后安装程序,所以我需要提供项目目录的路径。我无法静态定义。所以我需要指定项目目录的绝对路径。 Maven的$ {project.builddir}有这条路径。所以我需要在环境变量中设置这个路径,以便WIX后者可以使用它。

任何机构都可以告诉我如何在安装阶段设置环境变量。它应该只在构建在Windows上运行时设置。因为我的maven构建运行了3次。一个用于Windows一个用于mac,另一个用于Linux O.S.创建相应的安装程序。因此,如果它在Windows上运行,那么在安装阶段它应该设置环境变量,之后我的安装程序插件即maven ant插件应该运行。

我只需要知道POM中环境变量的设置,它只适用于在Windows中运行的构建。

修改

enter image description here

POM部分调用fx packager,调用candel

<execution>
                    <id>create-deployment-bundle</id>
                    <phase>install</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target name="installers" xmlns:fx="javafx:com.sun.javafx.tools.ant">

                            <taskdef uri="javafx:com.sun.javafx.tools.ant" resource="com/sun/javafx/tools/ant/antlib.xml"
                                classpath="${project.basedir}:${javafx.tools.ant.jar}" />

                            <fx:deploy nativeBundles="all" width="600" height="400" 
                                outdir="${project.build.directory}/dist" outfile="${project.build.finalName}"
                                verbose="true">

                                <fx:application name="${project.build.finalName}"
                                    mainClass="${javafx.main.class}" />

                                <fx:resources>
                                    <fx:fileset dir="${project.build.directory}"
                                        includes="${project.build.finalName}.jar" />
                                    <fx:fileset os="windows" type='license' includes="Licence.rtf" dir="${basedir}/package/macosx" />
                                </fx:resources>

                                <fx:preferences shortcut="true" menu="true"
                                    install="true" />

                                <fx:info title="${application.title}" vendor="${application.vendor}"
                                    copyright="${application.copyright}" description="${application.description}">
                                </fx:info>

                                <fx:platform javafx="${javafx.version}" basedir="${java.home}">
                                    <fx:jvmarg value="-Xms512m" />
                                    <fx:jvmarg value="-Xmx1024m" />
                                </fx:platform>
                                <fx:permissions elevated="true" />
                            </fx:deploy>
                        </target>
                    </configuration>
                </execution>

2 个答案:

答案 0 :(得分:1)

您可以在settings.xml中查看Build配置文件

<profiles>
  <profile>
   <id>dev-profile</id>
  <properties>
  <yourVariable.home>C:/tools/wix....</yourVariable.home>
    ...
  </properties>
  </profile>
  </profiles>

maven目标与-Pdev-profile和你的pom $ {yourVariable.home}

实际上如果你需要三个不同的变量来构建环境,你可以根据需要在settings.xml中创建大量的配置文件

答案 1 :(得分:1)

您可以使用Maven资源插件启用对* .wxs文件的过滤,以便您可以直接在WiX项目中使用Maven属性。

POM文件中的插件条目示例:

<plugin>
    <!-- copy resources -->
    <artifactId>maven-resources-plugin</artifactId>
    <groupId>org.apache.maven.plugins</groupId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>installer</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.basedir}/package/windows</outputDirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>**/*.wxs</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

通过设置<filtering>true</filtering>启用文件过滤,<directory>将处理输入到复制插件的所有文件,并用其值替换所有Maven属性引用。 <Property Id="MYPROJECTROOTPATH" Value="${project.builddir}"/> 标记之间的目录是您的WiX项目文件的位置。输出目录是放置过滤结果的位置。

在您的WiX项目文件中,您可以指定:

<Property Id="MYPROJECTROOTPATH" Value="C:\your\project\dir\target"/>

过滤后,它会看起来像这样:

candle

编译MSI时,使用已过滤的WXS文件的新位置-d,然后它应该允许您执行所需操作而无需指定环境变量。

这样做可以消除对操作系统处理环境变量的依赖

另一种替代方法是使用`candle -dRPAS_JAVA=${project.builddir} ...` 选项来定义预处理器变量。

例如:

env.RPAS_JAVA

在您的POM文件中(我不知道您实际上是如何调用蜡烛/灯光),您可以将构建目录用作变量,而在您的WXS文件中,您可以更改var.RPAS_JAVA到{{1}}。这有效地完成了同样的事情,但我喜欢过滤方法,因为这意味着我的命令行很少需要改变。