我正在使用maven与WIX工具集制作安装程序。我的Wix配置文件'WXS'需要当前的项目目录路径。基本上javafx打包工具拿WXS文件并放入临时文件夹,然后安装程序,所以我需要提供项目目录的路径。我无法静态定义。所以我需要指定项目目录的绝对路径。 Maven的$ {project.builddir}有这条路径。所以我需要在环境变量中设置这个路径,以便WIX后者可以使用它。
任何机构都可以告诉我如何在安装阶段设置环境变量。它应该只在构建在Windows上运行时设置。因为我的maven构建运行了3次。一个用于Windows一个用于mac,另一个用于Linux O.S.创建相应的安装程序。因此,如果它在Windows上运行,那么在安装阶段它应该设置环境变量,之后我的安装程序插件即maven ant插件应该运行。
我只需要知道POM中环境变量的设置,它只适用于在Windows中运行的构建。
<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>
答案 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}}。这有效地完成了同样的事情,但我喜欢过滤方法,因为这意味着我的命令行很少需要改变。