blob: 96339c5b4eaf85f9df520785c1e2351cb3b9d3c7 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!--
*** GENERATED FROM TEMPLATE - DO NOT EDIT ***
*** EDIT ../build.xml INSTEAD ***
-->
<project name="jfx-impl" default="jfx-deployment" basedir=".." xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:fx="javafx:com.sun.javafx.tools.ant">
<description>JavaFX-specific Ant calls</description>
<target name="-check-javafx">
<echo message="javafx.runtime = ${javafx.runtime}" level="verbose"/>
<echo message="javafx.sdk = ${javafx.sdk}" level="verbose"/>
<condition property="javafx.runtime.defined">
<and>
<isset property="javafx.runtime"/>
<not><contains string="${javafx.runtime}" substring="$${platform" casesensitive="false"/></not>
</and>
</condition>
<condition property="javafx.sdk.defined">
<and>
<isset property="javafx.sdk"/>
<not><contains string="${javafx.sdk}" substring="$${platform" casesensitive="false"/></not>
</and>
</condition>
<condition property="javafx.platform.defined">
<and>
<isset property="javafx.runtime.defined"/>
<isset property="javafx.sdk.defined"/>
</and>
</condition>
</target>
<target name="-javafx-missing-platform" depends="-check-javafx" unless="javafx.platform.defined">
<condition property="javafx.sdk.missing+default">
<and>
<equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
<not><isset property="javafx.sdk.defined"/></not>
</and>
</condition>
<condition property="javafx.sdk.missing-default">
<and>
<not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
<not><isset property="javafx.sdk.defined"/></not>
</and>
</condition>
<condition property="javafx.runtime.missing+default">
<and>
<equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
<not><isset property="javafx.runtime.defined"/></not>
</and>
</condition>
<condition property="javafx.runtime.missing-default">
<and>
<not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
<not><isset property="javafx.runtime.defined"/></not>
</and>
</condition>
</target>
<target name="-javafx-check-error" depends="-check-javafx, -javafx-missing-platform" unless="javafx.platform.defined">
<fail message="Platform definition problem.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="javafx.sdk.missing+default"/>
<fail message="Platform definition problem.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file)." if="javafx.sdk.missing-default"/>
<fail message="Platform definition problem.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="javafx.runtime.missing+default"/>
<fail message="Platform definition problem.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file)." if="javafx.runtime.missing-default"/>
</target>
<target name="-init-javafx">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
<condition property="have-fx-ant-init">
<typefound name="javafx:com.sun.javafx.tools.ant:init-ant"/>
</condition>
</target>
<target name="-check-jdk-version">
<exec executable="${platform.java}" outputproperty="version-output">
<arg value="-version"/>
</exec>
<condition property="have-jdk-older-than-1.6">
<or>
<contains string="${version-output}" substring="java version &quot;1.0"/>
<contains string="${version-output}" substring="java version &quot;1.1"/>
<contains string="${version-output}" substring="java version &quot;1.2"/>
<contains string="${version-output}" substring="java version &quot;1.3"/>
<contains string="${version-output}" substring="java version &quot;1.4"/>
<contains string="${version-output}" substring="java version &quot;1.5"/>
</or>
</condition>
</target>
<target name="-jdk-version-error" depends="-check-jdk-version" if="have-jdk-older-than-1.6">
<fail message="Error: JavaFX 2.0+ projects require JDK version 1.6+ !"/>
</target>
<target name="-check-jfx-deployment" depends="-init-javafx, -check-jdk-version, -jdk-version-error" unless="have-jdk-older-than-1.6">
<condition property="jfx-deployment-available">
<available file="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
</condition>
<echo message="jfx-deployment-available = ${jfx-deployment-available}" level="verbose"/>
</target>
<target name="-check-jfx-sdk-version-old" depends="-init-javafx" unless="have-fx-ant-init">
<property name="javafx.ant.version" value="1.0"/>
</target>
<target name="-check-jfx-sdk-version-new" depends="-init-javafx" if="have-fx-ant-init">
<fx:init-ant/>
<condition property="have-fx-ant-api-1.1">
<!-- new features from JavaFX 2.0.2 are available in API version 1.1 or later -->
<matches pattern="1.[1-9]" string="${javafx.ant.version}"/>
</condition>
</target>
<target name="-check-jfx-sdk-version" depends="-check-jfx-sdk-version-old, -check-jfx-sdk-version-new">
<echo message="Detected JavaFX Ant API version ${javafx.ant.version}" level="info"/>
<echo message="have-fx-ant-api-1.1 = ${have-fx-ant-api-1.1}" level="verbose"/>
</target>
<target name="-check-jfx-webstart">
<condition property="jfx-webstart-available">
<or>
<available file="${javafx.runtime}${file.separator}bin${file.separator}javaws.exe"/>
<available file="${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
</or>
</condition>
<echo message="jfx-webstart-available = ${jfx-webstart-available}" level="verbose"/>
</target>
<target name="-check-project" depends="-check-jfx-sdk-version">
<condition property="main-class-available">
<isset property="javafx.main.class"/>
</condition>
<condition property="preloader-available">
<and>
<isset property="javafx.preloader.enabled"/>
<equals arg1="${javafx.preloader.enabled}" arg2="true"/>
<isset property="javafx.preloader.class"/>
<not><equals arg1="${javafx.preloader.class}" arg2=""/></not>
<isset property="javafx.preloader.jar.filename"/>
<not><equals arg1="${javafx.preloader.jar.filename}" arg2=""/></not>
</and>
</condition>
<condition property="app-with-preloader">
<and>
<istrue value="${preloader-available}"/>
<istrue value="${main-class-available}"/>
</and>
</condition>
<condition property="app-with-external-preloader-jar">
<and>
<isset property="javafx.preloader.type"/>
<equals arg1="${javafx.preloader.type}" arg2="jar" trim="true"/>
</and>
</condition>
<condition property="app-without-preloader">
<and>
<not>
<istrue value="${preloader-available}"/>
</not>
<istrue value="${main-class-available}"/>
</and>
</condition>
<condition property="preloader-app">
<and>
<isset property="javafx.preloader"/>
<equals arg1="${javafx.preloader}" arg2="true"/>
</and>
</condition>
<condition property="html-template-available">
<and>
<isset property="javafx.run.htmltemplate"/>
<not>
<equals arg1="${javafx.run.htmltemplate}" arg2=""/>
</not>
</and>
</condition>
<condition property="icon-available">
<and>
<isset property="javafx.deploy.icon"/>
<not>
<equals arg1="${javafx.deploy.icon}" arg2=""/>
</not>
</and>
</condition>
<condition property="dimensions-available">
<and>
<isset property="javafx.run.width"/>
<isset property="javafx.run.height"/>
<not><equals arg1="${javafx.run.width}" arg2=""/></not>
<not><equals arg1="${javafx.run.height}" arg2=""/></not>
</and>
</condition>
<condition property="update-mode-background">
<and>
<isset property="javafx.deploy.backgroundupdate"/>
<equals arg1="${javafx.deploy.backgroundupdate}" arg2="true" trim="true"/>
</and>
</condition>
<condition property="offline-allowed">
<and>
<isset property="javafx.deploy.allowoffline"/>
<equals arg1="${javafx.deploy.allowoffline}" arg2="true" trim="true"/>
</and>
</condition>
<condition property="permissions-elevated">
<and>
<isset property="javafx.deploy.permissionselevated"/>
<equals arg1="${javafx.deploy.permissionselevated}" arg2="true" trim="true"/>
</and>
</condition>
<condition property="binary-encode-css">
<and>
<isset property="javafx.binarycss"/>
<equals arg1="${javafx.binarycss}" arg2="true" trim="true"/>
</and>
</condition>
<condition property="rebase-lib-jars">
<and>
<isset property="javafx.rebase.libs"/>
<equals arg1="${javafx.rebase.libs}" arg2="true" trim="true"/>
</and>
</condition>
<echo message="main-class-available = ${main-class-available}" level="verbose"/>
<echo message="preloader-available = ${preloader-available}" level="verbose"/>
<echo message="app-with-preloader = ${app-with-preloader}" level="verbose"/>
<echo message="app-with-preloader-without-project = ${app-with-preloader-without-project}" level="verbose"/>
<echo message="app-without-preloader = ${app-without-preloader}" level="verbose"/>
<echo message="preloader-app = ${preloader-app}" level="verbose"/>
<echo message="html-template-available = ${html-template-available}" level="verbose"/>
<echo message="icon-available = ${icon-available}" level="verbose"/>
<echo message="dimensions-available = ${dimensions-available}" level="verbose"/>
<echo message="update-mode-background = ${update-mode-background}" level="verbose"/>
<echo message="offline-allowed = ${offline-allowed}" level="verbose"/>
<echo message="permissions-elevated = ${permissions-elevated}" level="verbose"/>
<echo message="binary-encode-css = ${binary-encode-css}" level="verbose"/>
<echo message="rebase-lib-jars = ${rebase-lib-jars}" level="verbose"/>
</target>
<target name="-icon-warning" depends="-check-project" if="icon-available">
<echo message="Warning: Note that due to a bug in early JavaFX 2.0 SDK distributions the icon may not be properly set in deployment files."/>
</target>
<target name="-set-dimensions" depends="-check-project" if="dimensions-available">
<property name="javafx.width" value="${javafx.run.width}"/>
<property name="javafx.height" value="${javafx.run.height}"/>
</target>
<target name="-reset-dimensions" depends="-check-project" unless="dimensions-available">
<property name="javafx.width" value="800"/>
<property name="javafx.height" value="600"/>
</target>
<target name="-set-update-mode-background" depends="-check-project" if="update-mode-background">
<property name="update-mode" value="background"/>
</target>
<target name="-set-update-mode-eager" depends="-check-project" unless="update-mode-background">
<property name="update-mode" value="eager"/>
</target>
<target name="-set-permissions-elevated" depends="-check-project" if="permissions-elevated">
<property name="permissions.elevated" value="true"/>
</target>
<target name="-reset-permissions-elevated" depends="-check-project" unless="permissions-elevated">
<property name="permissions.elevated" value="false"/>
</target>
<target name="-set-binary-css" depends="-check-project" if="binary-encode-css">
<property name="css-include-ext" value="bss"/>
<property name="css-exclude-ext" value="css"/>
</target>
<target name="-unset-binary-css" depends="-check-project" unless="binary-encode-css">
<property name="css-include-ext" value="css"/>
<property name="css-exclude-ext" value="bss"/>
</target>
<target name="-copy-binary-css" depends="-check-project" if="binary-encode-css">
<fileset id="cssfiles" dir="${basedir}${file.separator}${build.classes.dir}">
<include name="**${file.separator}*.css"/>
</fileset>
<property name="cssfileslist" refid="cssfiles"/>
<echo message="css files to binary convert: " level="verbose">${cssfileslist}</echo>
<fx:csstobin outdir="${basedir}${file.separator}${build.classes.dir}">
<fileset refid="cssfiles"/>
</fx:csstobin>
</target>
<!-- Copy dependent libraries -->
<target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar">
<local name="run.classpath.without.build.classes.and.dist.dir"/>
<pathconvert property="run.classpath.without.build.classes.and.dist.dir">
<path path="${run.classpath}"/>
<map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
<map from="${basedir}${file.separator}${dist.jar}" to=""/>
</pathconvert>
<!-- add possibly missing dependencies at distance 2 (build system logic thus provides transitive closure) -->
<local name="run.and.lib.classpath"/>
<script language="javascript">
<![CDATA[
var pathConvert = project.createTask("pathconvert");
pathConvert.setProperty("run.and.lib.classpath");
var classPath = project.getProperty("run.classpath.without.build.classes.and.dist.dir");
var fileSeparator = project.getProperty("file.separator");
if(classPath != null) {
var classPathCopy = pathConvert.createPath();
classPathCopy.setPath(classPath);
if(classPath.indexOf(";") != -1) {
var pathArray = classPath.split(";");
} else {
var pathArray = classPath.split(":");
}
var added = "";
for (var i=0; i<pathArray.length; i++) {
var index = pathArray[i].lastIndexOf(fileSeparator);
if (index >=0) {
var onePath = pathArray[i].substr(0,index+1) + "lib";
var oneDir = new java.io.File(onePath);
if(oneDir.exists()) {
var fs = project.createDataType("fileset");
fs.setDir( oneDir );
fs.setIncludes("*.jar");
var ds = fs.getDirectoryScanner(project);
var srcFiles = ds.getIncludedFiles();
for (j=0; j<srcFiles.length; j++) {
if(classPath.indexOf(srcFiles[j]) == -1 && added.indexOf(srcFiles[j]) == -1) {
var path = pathConvert.createPath();
path.setPath(onePath + fileSeparator + srcFiles[j]);
added += srcFiles[j];
}
}
}
}
}
}
pathConvert.perform();
]]>
</script>
<echo message="run.and.lib.classpath = ${run.and.lib.classpath}" level="verbose"/>
<delete dir="${dist.dir}${file.separator}lib" includeEmptyDirs="true" quiet="true"/>
<copy todir="${dist.dir}${file.separator}lib" flatten="true" preservelastmodified="true" overwrite="true">
<path>
<pathelement path="${run.and.lib.classpath}"/>
</path>
</copy>
</target>
<target name="-copy-external-preloader-jar" depends="-check-project" if="app-with-external-preloader-jar">
<copy file="${javafx.preloader.jar.path}" todir="${dist.dir}${file.separator}lib"/>
</target>
<!-- Optional classpath re-base of dependent JAR manifests after copy to lib/, required by GlassFish -->
<macrodef name="rebase-lib">
<attribute name="jarfile"/>
<sequential>
<local name="tmpdir"/>
<property name="tmpdir" value="${java.io.tmpdir}${file.separator}${user.name}_${ant.project.name}_rebase" />
<echo message="tmpdir = ${tmpdir}" level="verbose"/>
<delete dir="${tmpdir}" quiet="true"/>
<mkdir dir="${tmpdir}"/>
<unzip src="@{jarfile}" dest="${tmpdir}">
<patternset>
<include name="META-INF${file.separator}MANIFEST.MF"/>
</patternset>
</unzip>
<local name="manifest.file.temp"/>
<property name="manifest.file.temp" value="${tmpdir}${file.separator}META-INF${file.separator}MANIFEST.MF" />
<echo message="manifest.file.temp = ${manifest.file.temp}" level="verbose"/>
<!-- edited manifest file -->
<local name="manifest.file.temp.new"/>
<property name="manifest.file.temp.new" value="${manifest.file.temp}_new" />
<echo message="manifest.file.temp.new = ${manifest.file.temp.new}" level="verbose"/>
<script language="javascript">
<![CDATA[
var UTF_8 = "UTF-8";
var ATTR_CLASS_PATH = "Class-Path";
var ATTR_CLASS_PATH_FX = "JavaFX-Class-Path";
function isSigned(manifest) {
var sections = manifest.getSectionNames();
while(sections.hasMoreElements()) {
var sectionname = sections.nextElement();
var section = manifest.getSection(sectionname);
if(section != null) {
var sectionKeys = section.getAttributeKeys();
while (sectionKeys.hasMoreElements()) {
var element = sectionKeys.nextElement();
if (element.endsWith("-Digest") || element.endsWith("-digest")) {
return true;
}
}
}
}
return false;
}
var src = project.getProperty("manifest.file.temp");
var srf = new java.io.File(src);
try {
var fis = new java.io.FileInputStream(srf);
try {
var isr = new java.io.InputStreamReader(fis, UTF_8);
try {
var manifest = new org.apache.tools.ant.taskdefs.Manifest(isr);
} finally {
isr.close();
}
} finally {
fis.close();
}
} catch(e) {
var manifest = null;
}
if(manifest != null) {
if(isSigned(manifest)) {
println("Warning: Signed JAR can not be rebased.");
} else {
var mainSection = manifest.getMainSection();
var classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH);
if (classPath != null) {
var classPathAttr = ATTR_CLASS_PATH;
} else {
classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH_FX);
if(classPath != null) {
var classPathAttr = ATTR_CLASS_PATH_FX;
}
}
if(classPath != null) {
var result = new java.lang.StringBuilder();
var changed = false;
var pathArray = classPath.split(" ");
for (var i=0; i<pathArray.length; i++) {
if (result.length() > 0) {
result.append(' ');
}
var index = pathArray[i].lastIndexOf('/');
if (index >=0 && index < pathArray[i].length()-1) {
pathArray[i] = pathArray[i].substring(index+1);
changed = true;
}
result.append(pathArray[i]);
}
mainSection.removeAttribute(classPathAttr);
mainSection.addAttributeAndCheck(new org.apache.tools.ant.taskdefs.Manifest.Attribute(classPathAttr, result.toString()));
var tgt = project.getProperty("manifest.file.temp.new");
var tgf = new java.io.File(tgt);
try {
var fos = new java.io.FileOutputStream(tgf);
try {
var osw = new java.io.OutputStreamWriter(fos, UTF_8);
try {
var manifestOut = new java.io.PrintWriter(osw);
manifest.write(manifestOut);
manifestOut.close();
} finally {
osw.close();
}
} finally {
fos.close();
}
} catch(e) {
println("Warning: problem storing rebased manifest file.");
}
}
}
}
]]>
</script>
<antcall target="-move-new-manifest-if-exists">
<param name="move.file.from" value="${manifest.file.temp.new}"/>
<param name="move.file.to" value="${manifest.file.temp}"/>
</antcall>
<zip destfile="@{jarfile}" basedir="${tmpdir}" update="true"/>
<delete dir="${tmpdir}" quiet="true"/>
</sequential>
</macrodef>
<target name="-new-temp-mainfest-existence">
<condition property="new-temp-manifest-exists">
<available file="${move.file.from}"/>
</condition>
<echo message="new-temp-manifest-exists = ${new-temp-manifest-exists}" level="verbose"/>
</target>
<target name="-move-new-manifest-if-exists" depends="-new-temp-mainfest-existence" if="new-temp-manifest-exists">
<move file="${move.file.from}" tofile="${move.file.to}" failonerror="false"/>
</target>
<target name="-rebase-libs-macro-call">
<echo message="Rebase jarfile = ${jar.file.to.rebase}" level="verbose"/>
<rebase-lib jarfile="${jar.file.to.rebase}"/>
</target>
<target name="-rebase-libs" depends="-check-project, -jfx-copylibs" if="rebase-lib-jars">
<property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
<property name="pp_rebase_fs" value="*.jar"/>
<script language="javascript">
<![CDATA[
var dir = project.getProperty("pp_rebase_dir");
var fDir = new java.io.File(dir);
if( fDir.exists() ) {
var callTask = project.createTask("antcall");
callTask.setTarget("-rebase-libs-macro-call");
var param = callTask.createParam();
param.setName("jar.file.to.rebase");
var includes = project.getProperty("pp_rebase_fs");
var fs = project.createDataType("fileset");
fs.setDir( fDir );
fs.setIncludes(includes);
var ds = fs.getDirectoryScanner(project);
var srcFiles = ds.getIncludedFiles();
for (i=0; i<srcFiles.length; i++) {
param.setValue(dir + "${file.separator}" + srcFiles[i]);
callTask.perform();
}
}
]]>
</script>
</target>
<!-- Main Target -->
<target name="jfx-deployment" depends="-check-jfx-deployment,-check-project,-icon-warning,
-set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
-set-permissions-elevated,-reset-permissions-elevated,
-copy-external-preloader-jar,-set-binary-css,-unset-binary-css,-copy-binary-css,
-deploy-app-sign-nopreloader-notemplate,
-deploy-app-sign-preloader-notemplate,
-deploy-app-sign-nopreloader-template,
-deploy-app-sign-preloader-template,
-deploy-app-nosign-nopreloader-notemplate,
-deploy-app-nosign-preloader-notemplate,
-deploy-app-nosign-nopreloader-template,
-deploy-app-nosign-preloader-template"
if="jfx-deployment-available">
</target>
<!-- Security / Signing -->
<target name="-unavailable-signjars-task" depends="-check-jfx-deployment" unless="jfx-deployment-available">
<echo message="Task required to sign JAR file is missing, check the availability of JavaFX 2.0 deployment tasks. JAR files will not be signed."/>
</target>
<target name="-security-props-check">
<condition property="javafx.signed.true">
<istrue value="${javafx.signing.enabled}"/>
</condition>
</target>
<target name="-check-signing-possible" depends="-security-props-check,-check-jfx-deployment,-unavailable-signjars-task">
<condition property="javafx.signed.true+signjars.task.available">
<and>
<isset property="javafx.signed.true"/>
<isset property="jfx-deployment-available"/>
</and>
</condition>
</target>
<target name="-javafx-init-keystore" depends="-check-signing-possible,-javafx-init-signing,-javafx-init-keystore1,-javafx-init-keystore2,-check-keystore-exists" if="javafx.signed.true+signjars.task.available" unless="javafx.signjar.keystore.exists">
<property name="javafx.signjar.vendor" value="CN=${application.vendor}"/>
<echo message="Going to create default keystore in ${javafx.signjar.keystore}"/>
<genkey dname="${javafx.signjar.vendor}" alias="${javafx.signjar.alias}" keystore="${javafx.signjar.keystore}"
storepass="${javafx.signjar.storepass}" keypass="${javafx.signjar.keypass}"/>
</target>
<target name="-check-keystore-exists">
<available property="javafx.signjar.keystore.exists" file="${javafx.signjar.keystore}"/>
</target>
<target name="-javafx-init-signing">
<condition property="generated.key.signing">
<equals arg1="${javafx.signing.type}" arg2="self" trim="true"/>
</condition>
</target>
<target name="-javafx-init-keystore1" depends="-javafx-init-signing" if="generated.key.signing">
<property name="javafx.signjar.keystore" value="${basedir}${file.separator}build${file.separator}nb-jfx.jks" />
<property name="javafx.signjar.storepass" value="storepass"/>
<property name="javafx.signjar.keypass" value="keypass"/>
<property name="javafx.signjar.alias" value="nb-jfx"/>
</target>
<target name="-javafx-init-keystore2" depends="-javafx-init-signing" unless="generated.key.signing">
<property name="javafx.signjar.keystore" value="${javafx.signing.keystore}" />
<property name="javafx.signjar.storepass" value="${javafx.signing.keystore.password}"/>
<property name="javafx.signjar.keypass" value="${javafx.signing.keyalias.password}"/>
<property name="javafx.signjar.alias" value="${javafx.signing.keyalias}"/>
</target>
<!-- Project Deployment Macros -->
<macrodef name="deploy-defines">
<sequential>
<basename property="jfx.deployment.jar" file="${dist.jar}"/>
<property name="jfx.deployment.dir" location="${dist.dir}"/>
</sequential>
</macrodef>
<macrodef name="deploy-preprocess">
<sequential>
<delete includeEmptyDirs="true" quiet="true">
<fileset dir="${jfx.deployment.dir}${file.separator}lib">
<exclude name="**${file.separator}*.jar"/>
</fileset>
</delete>
</sequential>
</macrodef>
<!-- fx:jar scripted call enables passing of arbitrarily long list of params and fx-version dependent behavior -->
<macrodef name="deploy-jar">
<sequential>
<typedef name="fx_jar" classname="com.sun.javafx.tools.ant.FXJar" classpath="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
<property name="pp_jar_destfile" value="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}"/>
<property name="pp_jar_buildclasses" value="${basedir}${file.separator}${build.classes.dir}"/>
<property name="pp_jar_cssbss" value="**${file.separator}*.${css-exclude-ext}"/>
<property name="pp_jar_dir" value="${jfx.deployment.dir}"/>
<property name="pp_jar_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
<property name="pp_jar_fs2" value="lib${file.separator}*.jar"/>
<script language="javascript">
<![CDATA[
var S = java.io.File.separator;
var JFXPAR = "javafx.param";
var JFXPARN = "name";
var JFXPARV = "value";
var JFXLAZY = "download.mode.lazy.jar";
var withpreloader = project.getProperty("app-with-preloader");
var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
// get jars with lazy download mode property set
function getLazyJars() {
var jars = new Array();
var keys = project.getProperties().keys();
while(keys.hasMoreElements()) {
var pn = keys.nextElement();
if(pn.substr(0,JFXLAZY.length) == JFXLAZY) {
var fname = pn.substring(JFXLAZY.length+1);
jars.push(fname);
}
}
return jars.length > 0 ? jars : null;
}
// set download mode of dependent libraries
function setDownloadMode(fsEager, fsLazy, jars) {
for(i = 0; i < jars.length; i++) {
fsEager.setExcludes("lib" + S + jars[i]);
fsLazy.setIncludes("lib" + S + jars[i]);
}
}
// fx:jar
var jar = project.createTask("fx_jar");
jar.setProject(project);
var destfile = project.getProperty("pp_jar_destfile");
jar.setDestfile(destfile);
// fx:application
var app = jar.createApplication();
app.setProject(project);
var title = project.getProperty("application.title");
var mainclass = project.getProperty("javafx.main.class");
var fallback = project.getProperty("javafx.fallback.class");
app.setName(title);
app.setMainClass(mainclass);
app.setFallbackClass(fallback);
if(withpreloader == "true") {
preloaderclass = project.getProperty("javafx.preloader.class");
app.setPreloaderClass(preloaderclass);
}
// fx:param, fx:argument
var keys = project.getProperties().keys();
while(keys.hasMoreElements()) {
var pn = keys.nextElement();
if(pn.substr(0,JFXPAR.length) == JFXPAR && pn.indexOf(JFXPARN) == (pn.length()-JFXPARN.length)) {
var propn = project.getProperty(pn);
if(propn != null && propn.length() > 0) {
var pv = pn.substr(0,pn.indexOf(JFXPARN)) + JFXPARV;
var propv = project.getProperty(pv);
if(propv != null && propv.length() > 0) {
var par = app.createParam();
par.setName(propn);
par.setValue(propv);
} else {
if(fx_ant_api_1_1 == "true") {
var arg = app.createArgument();
arg.addText(propn);
}
}
}
}
}
// fx:resources
var res = jar.createResources();
res.setProject(project);
var pdir = project.getProperty("pp_jar_dir");
if(withpreloader == "true") {
var f1 = res.createFileSet();
f1.setProject(project);
f1.setDir(new java.io.File(pdir));
var i1 = project.getProperty("pp_jar_fs1");
f1.setIncludes(i1);
f1.setRequiredFor("preloader");
var f2 = res.createFileSet();
f2.setProject(project);
f2.setDir(new java.io.File(pdir));
var i2a = project.getProperty("jfx.deployment.jar");
var i2b = project.getProperty("pp_jar_fs2");
var e2c = project.getProperty("pp_jar_fs1");
f2.setIncludes(i2a);
f2.setIncludes(i2b);
f2.setExcludes(e2c);
f2.setRequiredFor("startup");
var lazyjars = getLazyJars();
if(lazyjars != null) {
var f3 = res.createFileSet();
f3.setProject(project);
f3.setDir(new java.io.File(pdir));
f3.setRequiredFor("runtime");
setDownloadMode(f2,f3,lazyjars);
}
} else {
var fn = res.createFileSet();
fn.setProject(project);
fn.setDir(new java.io.File(pdir));
var ia = project.getProperty("jfx.deployment.jar");
var ib = project.getProperty("pp_jar_fs2");
fn.setIncludes(ia);
fn.setIncludes(ib);
fn.setRequiredFor("startup");
var lazyjars = getLazyJars();
if(lazyjars != null) {
var fn2 = res.createFileSet();
fn2.setProject(project);
fn2.setDir(new java.io.File(pdir));
fn2.setRequiredFor("runtime");
setDownloadMode(fn,fn2,lazyjars);
}
}
// fileset to exclude *.css or *.bss
var fs = jar.createFileSet();
fs.setProject(project);
var buildcls = project.getProperty("pp_jar_buildclasses");
var exc = project.getProperty("pp_jar_cssbss");
fs.setDir(new java.io.File(buildcls));
fs.setExcludes(exc);
// manifest
var man = jar.createManifest();
var a1val = project.getProperty("application.vendor");
var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
a1.setName("Implementation-Vendor");
a1.setValue(a1val);
man.addConfiguredAttribute(a1);
var a2val = project.getProperty("application.title");
var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
a2.setName("Implementation-Title");
a2.setValue(a2val);
man.addConfiguredAttribute(a2);
var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
a3.setName("Implementation-Version");
a3.setValue("1.0");
man.addConfiguredAttribute(a3);
jar.perform();
]]>
</script>
</sequential>
</macrodef>
<macrodef name="deploy-sign">
<sequential>
<echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
<echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
<echo message="alias=${javafx.signjar.alias}" level="verbose"/>
<echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
<signjar keystore="${javafx.signjar.keystore}"
storepass="${javafx.signjar.storepass}"
alias="${javafx.signjar.alias}"
keypass="${javafx.signjar.keypass}">
<fileset dir="${jfx.deployment.dir}">
<include name="${jfx.deployment.jar}"/>
<include name="lib${file.separator}*.jar"/>
</fileset>
</signjar>
</sequential>
</macrodef>
<macrodef name="deploy-sign-preloader">
<sequential>
<echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
<echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
<echo message="alias=${javafx.signjar.alias}" level="verbose"/>
<echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
<signjar keystore="${javafx.signjar.keystore}"
storepass="${javafx.signjar.storepass}"
alias="${javafx.signjar.alias}"
keypass="${javafx.signjar.keypass}">
<fileset dir="${jfx.deployment.dir}">
<include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
</fileset>
</signjar>
<signjar keystore="${javafx.signjar.keystore}"
storepass="${javafx.signjar.storepass}"
alias="${javafx.signjar.alias}"
keypass="${javafx.signjar.keypass}">
<fileset dir="${jfx.deployment.dir}">
<include name="${jfx.deployment.jar}"/>
<include name="lib${file.separator}*.jar"/>
<exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
</fileset>
</signjar>
</sequential>
</macrodef>
<macrodef name="deploy-process-template">
<sequential>
<echo message="javafx.run.htmltemplate = ${javafx.run.htmltemplate}" level="verbose"/>
<pathconvert property="javafx.run.htmltemplate.processed">
<path path="${javafx.run.htmltemplate}"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<regexpmapper from="(.*)(\.html?)$" to="\1-processed\2"/>
<globmapper from="*" to="${jfx.deployment.dir}${file.separator}*" casesensitive="no"/>
</chainedmapper>
</mapper>
</pathconvert>
<echo message="javafx.run.htmltemplate.processed = ${javafx.run.htmltemplate.processed}" level="verbose"/>
</sequential>
</macrodef>
<!-- fx:deploy scripted call enables passing of arbitrarily long lists of params, vmoptions and callbacks and fx-version dependent behavior -->
<macrodef name="deploy-deploy">
<sequential>
<typedef name="fx_deploy" classname="com.sun.javafx.tools.ant.DeployFXTask" classpath="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
<property name="pp_deploy_dir" value="${jfx.deployment.dir}"/>
<property name="pp_deploy_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
<property name="pp_deploy_fs2" value="lib${file.separator}*.jar"/>
<script language="javascript">
<![CDATA[
function isTrue(prop) {
return prop != null &&
(prop.toLowerCase()=="true" || prop.toLowerCase()=="yes" || prop.toLowerCase()=="on");
}
var S = java.io.File.separator;
var JFXPAR = "javafx.param";
var JFXPARN = "name";
var JFXPARV = "value";
var JFXCALLB = "javafx.jscallback";
var JFXLAZY = "download.mode.lazy.jar";
var withpreloader = project.getProperty("app-with-preloader");
var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
// get jars with lazy download mode property set
function getLazyJars() {
var jars = new Array();
var keys = project.getProperties().keys();
while(keys.hasMoreElements()) {
var pn = keys.nextElement();
if(pn.substr(0,JFXLAZY.length) == JFXLAZY) {
var fname = pn.substring(JFXLAZY.length+1);
jars.push(fname);
}
}
return jars.length > 0 ? jars : null;
}
// set download mode of dependent libraries
function setDownloadMode(fsEager, fsLazy, jars) {
for(i = 0; i < jars.length; i++) {
fsEager.setExcludes("lib" + S + jars[i]);
fsLazy.setIncludes("lib" + S + jars[i]);
}
}
// fx:deploy
var deploy = project.createTask("fx_deploy");
deploy.setProject(project);
var width = project.getProperty("javafx.width");
var height = project.getProperty("javafx.height");
var outdir = project.getProperty("jfx.deployment.dir");
var embedJNLP = project.getProperty("javafx.deploy.embedJNLP");
var updatemode = project.getProperty("update-mode");
var outfile = project.getProperty("application.title");
var includeDT = project.getProperty("javafx.deploy.includeDT");
var offline = project.getProperty("javafx.deploy.allowoffline");
deploy.setWidth(width);
deploy.setHeight(height);
deploy.setOutdir(outdir);
deploy.setEmbedJNLP(isTrue(embedJNLP));
deploy.setUpdateMode(updatemode);
deploy.setOutfile(outfile);
deploy.setIncludeDT(isTrue(includeDT));
if(offline != null) {
if(fx_ant_api_1_1 == "true") {
deploy.setOfflineAllowed(isTrue(offline));
} else {
println("Warning: offlineAllowed not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
}
}
// fx:application
var app = deploy.createApplication();
app.setProject(project);
var title = project.getProperty("application.title");
var mainclass = project.getProperty("javafx.main.class");
var fallback = project.getProperty("javafx.fallback.class");
app.setName(title);
app.setMainClass(mainclass);
app.setFallbackClass(fallback);
if(withpreloader == "true") {
preloaderclass = project.getProperty("javafx.preloader.class");
app.setPreloaderClass(preloaderclass);
}
// fx:param, fx:argument
var keys = project.getProperties().keys();
while(keys.hasMoreElements()) {
var pn = keys.nextElement();
if(pn.substr(0,JFXPAR.length) == JFXPAR && pn.indexOf(JFXPARN) == (pn.length()-JFXPARN.length)) {
var propn = project.getProperty(pn);
if(propn != null && propn.length() > 0) {
var pv = pn.substr(0,pn.indexOf(JFXPARN)) + JFXPARV;
var propv = project.getProperty(pv);
if(propv != null && propv.length() > 0) {
var par = app.createParam();
par.setName(propn);
par.setValue(propv);
} else {
if(fx_ant_api_1_1 == "true") {
var arg = app.createArgument();
arg.addText(propn);
} else {
println("Warning: Unnamed parameters not supported by this version of JavaFX SDK deployment Ant tasks. Upgrade JavaFX to 2.0.2 or higher.");
}
}
}
}
}
// fx:resources
var res = deploy.createResources();
res.setProject(project);
var deploydir = project.getProperty("pp_deploy_dir");
if(withpreloader == "true") {
var f1 = res.createFileSet();
f1.setProject(project);
f1.setDir(new java.io.File(deploydir));
var i1 = project.getProperty("pp_deploy_fs1");
f1.setIncludes(i1);
f1.setRequiredFor("preloader");
var f2 = res.createFileSet();
f2.setProject(project);
f2.setDir(new java.io.File(deploydir));
var i2a = project.getProperty("jfx.deployment.jar");
var i2b = project.getProperty("pp_deploy_fs2");
var e2c = project.getProperty("pp_deploy_fs1");
f2.setIncludes(i2a);
f2.setIncludes(i2b);
f2.setExcludes(e2c);
f2.setRequiredFor("startup");
var lazyjars = getLazyJars();
if(lazyjars != null) {
var f3 = res.createFileSet();
f3.setProject(project);
f3.setDir(new java.io.File(deploydir));
f3.setRequiredFor("runtime");
setDownloadMode(f2,f3,lazyjars);
}
} else {
var fn = res.createFileSet();
fn.setProject(project);
fn.setDir(new java.io.File(deploydir));
var ia = project.getProperty("jfx.deployment.jar");
var ib = project.getProperty("pp_deploy_fs2");
fn.setIncludes(ia);
fn.setIncludes(ib);
fn.setRequiredFor("startup");
var lazyjars = getLazyJars();
if(lazyjars != null) {
var fn2 = res.createFileSet();
fn2.setProject(project);
fn2.setDir(new java.io.File(deploydir));
fn2.setRequiredFor("runtime");
setDownloadMode(fn,fn2,lazyjars);
}
}
// fx:info
var info = deploy.createInfo();
info.setProject(project);
var vendor = project.getProperty("application.vendor");
info.setTitle(title); // title known from before
info.setVendor(vendor);
var icon = project.getProperty("javafx.deploy.icon");
if(icon != null) {
if(fx_ant_api_1_1 == "true") {
var iicon = info.createIcon();
iicon.setHref(icon);
} else {
println("Warning: Icon not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
}
}
// fx:permissions
var perm = deploy.createPermissions();
perm.setProject(project);
var elev = project.getProperty("permissions.elevated");
perm.setElevated(isTrue(elev));
// fx:preferences
var pref = deploy.createPreferences();
pref.setProject(project);
var scut = project.getProperty("javafx.deploy.adddesktopshortcut");
var instp = project.getProperty("javafx.deploy.installpermanently");
var smenu = project.getProperty("javafx.deploy.addstartmenushortcut");
pref.setShortcut(isTrue(scut));
pref.setInstall(isTrue(instp));
pref.setMenu(isTrue(smenu));
// fx:template
var templ = project.getProperty("javafx.run.htmltemplate");
var templp = project.getProperty("javafx.run.htmltemplate.processed");
if(templ != null && templp != null && templ.length() > 0 && templp.length() > 0) {
var temp = deploy.createTemplate();
temp.setProject(project);
temp.setFile(new java.io.File(templ));
temp.setTofile(new java.io.File(templp));
}
// fx:platform
var plat = deploy.createPlatform();
plat.setProject(project);
plat.setJavafx("2.0+");
var jvmargs = project.getProperty("run.jvmargs");
if(jvmargs != null && jvmargs.length() > 0) {
var jvmargss = jvmargs.split(" ");
for(i = 0; i < jvmargss.length; i++) {
if(jvmargss[i] != null && jvmargss[i].length() > 0) {
var vmarg = plat.createJvmarg();
vmarg.setValue(jvmargss[i]);
}
}
}
// fx:callbacks
var callbs = deploy.createCallbacks();
callbs.setProject(project);
var keys = project.getProperties().keys();
while(keys.hasMoreElements()) {
var pn = keys.nextElement();
if(pn.substr(0,JFXCALLB.length) == JFXCALLB) {
var prop = project.getProperty(pn);
if(prop != null && prop.length() > 0) {
var cname = pn.substring(JFXCALLB.length+1);
var cb = callbs.createCallback();
cb.setProject(project);
cb.setName(cname);
cb.addText(prop);
}
}
}
deploy.perform();
]]>
</script>
</sequential>
</macrodef>
<!-- Project Deployment Targets -->
<target name="-check-sign" depends="-check-project,-javafx-init-keystore" if="javafx.signed.true+signjars.task.available">
<condition property="sign-nopreloader-notemplate">
<and>
<isset property="app-without-preloader"/>
<not><isset property="html-template-available"/></not>
</and>
</condition>
<condition property="sign-preloader-notemplate">
<and>
<isset property="app-with-preloader"/>
<not><isset property="html-template-available"/></not>
</and>
</condition>
<condition property="sign-nopreloader-template">
<and>
<isset property="app-without-preloader"/>
<isset property="html-template-available"/>
</and>
</condition>
<condition property="sign-preloader-template">
<and>
<isset property="app-with-preloader"/>
<isset property="html-template-available"/>
</and>
</condition>
</target>
<target name="-check-nosign" depends="-check-project">
<condition property="nosign-nopreloader-notemplate">
<and>
<isset property="app-without-preloader"/>
<not><isset property="html-template-available"/></not>
<not><isset property="javafx.signed.true"/></not>
</and>
</condition>
<condition property="nosign-preloader-notemplate">
<and>
<isset property="app-with-preloader"/>
<not><isset property="html-template-available"/></not>
<not><isset property="javafx.signed.true"/></not>
</and>
</condition>
<condition property="nosign-nopreloader-template">
<and>
<isset property="app-without-preloader"/>
<isset property="html-template-available"/>
<not><isset property="javafx.signed.true"/></not>
</and>
</condition>
<condition property="nosign-preloader-template">
<and>
<isset property="app-with-preloader"/>
<isset property="html-template-available"/>
<not><isset property="javafx.signed.true"/></not>
</and>
</condition>
</target>
<!-- WITH SIGNING -->
<!-- project without preloader -->
<!-- no html template -->
<target name="-deploy-app-sign-nopreloader-notemplate" depends="-check-sign" if="sign-nopreloader-notemplate" unless="preloader-app">
<echo message="-deploy-app-sign-nopreloader-notemplate" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-sign/>
<deploy-deploy/>
</target>
<!-- project with preloader -->
<!-- no html template -->
<target name="-deploy-app-sign-preloader-notemplate" depends="-check-sign" if="sign-preloader-notemplate" unless="preloader-app">
<echo message="-deploy-app-sign-preloader-notemplate" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-sign-preloader/>
<deploy-deploy/>
</target>
<!-- project without preloader -->
<!-- html template -->
<target name="-deploy-app-sign-nopreloader-template" depends="-check-sign" if="sign-nopreloader-template" unless="preloader-app">
<echo message="-deploy-app-sign-nopreloader-template" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-sign/>
<deploy-process-template/>
<deploy-deploy/>
</target>
<!-- project with preloader -->
<!-- html template -->
<target name="-deploy-app-sign-preloader-template" depends="-check-sign" if="sign-preloader-template" unless="preloader-app">
<echo message="-deploy-app-sign-preloader-template" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-sign-preloader/>
<deploy-process-template/>
<deploy-deploy/>
</target>
<!-- NO SIGNING -->
<!-- project without preloader -->
<!-- no html template -->
<target name="-deploy-app-nosign-nopreloader-notemplate" depends="-check-nosign" if="nosign-nopreloader-notemplate" unless="preloader-app">
<echo message="-deploy-app-nosign-nopreloader-notemplate" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-deploy/>
</target>
<!-- project with preloader -->
<!-- no html template -->
<target name="-deploy-app-nosign-preloader-notemplate" depends="-check-nosign" if="nosign-preloader-notemplate" unless="preloader-app">
<echo message="-deploy-app-nosign-preloader-notemplate" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-deploy/>
</target>
<!-- project without preloader -->
<!-- html template -->
<target name="-deploy-app-nosign-nopreloader-template" depends="-check-nosign" if="nosign-nopreloader-template" unless="preloader-app">
<echo message="-deploy-app-nosign-nopreloader-template" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-process-template/>
<deploy-deploy/>
</target>
<!-- project with preloader -->
<!-- html template -->
<target name="-deploy-app-nosign-preloader-template" depends="-check-nosign" if="nosign-preloader-template" unless="preloader-app">
<echo message="-deploy-app-nosign-preloader-template" level="verbose"/>
<deploy-defines/>
<deploy-preprocess/>
<deploy-jar/>
<deploy-process-template/>
<deploy-deploy/>
</target>
<!-- Running/Debugging Standalone -->
<target name="jfxsa-run" depends="run"/>
<target name="jfxsa-debug" depends="jar,debug"/>
<!-- Running/Debugging as WebStart -->
<target name="-check-jnlp-file">
<basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
<property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
<condition property="jnlp-file-exists">
<available file="${jfx.deployment.jnlp}"/>
</condition>
<condition property="jnlp-file-exists+netbeans.home">
<and>
<isset property="jnlp-file-exists"/>
<isset property="netbeans.home"/>
</and>
</condition>
</target>
<target name="-resolve-jnlp-file" depends="-check-jnlp-file" unless="jnlp-file-exists">
<antcall target="jfx-deployment"/>
<antcall target="-check-jnlp-file"/>
</target>
<target name="jfxws-run" depends="jar,-check-jfx-webstart,-resolve-jnlp-file" if="jnlp-file-exists" description="Start fx javaws execution">
<echo message="Executing ${jfx.deployment.jnlp} using ${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
<exec executable="${javafx.runtime}${file.separator}bin${file.separator}javaws">
<arg file="${jfx.deployment.jnlp}"/>
</exec>
</target>
<target name="jfxws-debug" if="jnlp-file-exists+netbeans.home" depends="jar,-check-jfx-webstart,-resolve-jnlp-file,-debug-start-debugger,-debug-javaws-debuggee"
description="Debug fx javaws project in IDE"/>
<target name="-init-debug-args">
<property name="version-output" value="java version &quot;${ant.java.version}"/>
<condition property="have-jdk-older-than-1.4">
<or>
<contains string="${version-output}" substring="java version &quot;1.0"/>
<contains string="${version-output}" substring="java version &quot;1.1"/>
<contains string="${version-output}" substring="java version &quot;1.2"/>
<contains string="${version-output}" substring="java version &quot;1.3"/>
</or>
</condition>
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
<istrue value="${have-jdk-older-than-1.4}"/>
</condition>
<condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
<os family="windows"/>
</condition>
<condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
<isset property="debug.transport"/>
</condition>
</target>
<target name="-debug-javaws-debuggee" depends="-init-debug-args">
<echo message="Executing ${jfx.deployment.jnlp} in debug mode using ${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
<exec executable="${javafx.runtime}${file.separator}bin${file.separator}javaws">
<env key="JAVAWS_VM_ARGS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
<arg value="-wait"/>
<arg file="${jfx.deployment.jnlp}"/>
</exec>
</target>
<!-- Running/Debugging in Browser -->
<target name="-check-template-processed-html-file">
<condition property="html-file-exists">
<and>
<isset property="html-template-available"/>
<available file="${javafx.run.htmltemplate.processed}"/>
</and>
</condition>
</target>
<target name="-set-template-processed-html-file" depends="-check-template-processed-html-file" if="html-file-exists">
<property name="jfx.deployment.html" location="${javafx.run.htmltemplate.processed}"/>
</target>
<target name="-set-html-file" depends="-set-template-processed-html-file" unless="html-file-exists">
<basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
<property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
<condition property="html-file-exists">
<available file="${jfx.deployment.html}"/>
</condition>
<condition property="html-file-exists+netbeans.home">
<and>
<isset property="html-file-exists"/>
<isset property="netbeans.home"/>
</and>
</condition>
</target>
<target name="jfxbe-run" depends="jar,-set-html-file" if="html-file-exists" description="Start JavaFX execution in browser">
<echo message="Executing ${jfx.deployment.html} using ${javafx.run.inbrowser.path}"/>
<exec executable="${javafx.run.inbrowser.path}">
<arg file="${jfx.deployment.html}"/>
</exec>
</target>
<target name="jfxbe-debug" if="html-file-exists+netbeans.home" depends="jar,-set-html-file,-debug-start-debugger,-debug-jfxbe-debuggee"
description="Debug JavaFX project in browser"/>
<target name="-init-debug-args">
<property name="version-output" value="java version &quot;${ant.java.version}"/>
<condition property="have-jdk-older-than-1.4">
<or>
<contains string="${version-output}" substring="java version &quot;1.0"/>
<contains string="${version-output}" substring="java version &quot;1.1"/>
<contains string="${version-output}" substring="java version &quot;1.2"/>
<contains string="${version-output}" substring="java version &quot;1.3"/>
</or>
</condition>
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
<istrue value="${have-jdk-older-than-1.4}"/>
</condition>
<condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
<os family="windows"/>
</condition>
<condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
<isset property="debug.transport"/>
</condition>
</target>
<target name="-debug-jfxbe-debuggee" depends="-init-debug-args">
<echo message="Executing ${jfx.deployment.html} in debug mode using ${javafx.run.inbrowser.path}"/>
<exec executable="${javafx.run.inbrowser.path}">
<env key="_JPI_VM_OPTIONS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
<arg file="${jfx.deployment.html}"/>
</exec>
</target>
</project>