<property name="default.javac.source" value="9"/>
<property name="default.javac.target" value="9"/>
</target>
- <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+ <target depends="-pre-init,-init-private,-init-user" name="-init-pre-project">
<property file="nbproject/configs/${config}.properties"/>
<property file="nbproject/project.properties"/>
+ <property name="netbeans.modular.tasks.version" value="1"/>
+ <property location="${build.dir}/tasks/${netbeans.modular.tasks.version}" name="netbeans.modular.tasks.dir"/>
+ </target>
+ <target depends="-init-pre-project" name="-check-netbeans-tasks">
+ <condition property="netbeans.tasks.compiled">
+ <available file="${netbeans.modular.tasks.dir}/out/netbeans/ModuleInfoSelector.class"/>
+ </condition>
+ </target>
+ <target depends="-init-pre-project,-check-netbeans-tasks" name="-init-compile-netbeans-tasks" unless="netbeans.tasks.compiled">
+ <echo file="${netbeans.modular.tasks.dir}/src/netbeans/CoalesceKeyvalue.java">
+
+package netbeans;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+public class CoalesceKeyvalue extends Task {
+ private String property;
+
+ public void setProperty(String property) {
+ this.property = property;
+ }
+
+ private String value;
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ private String valueSep;
+
+ public void setValueSep(String valueSep) {
+ this.valueSep = valueSep;
+ }
+
+ private String entrySep;
+
+ public void setEntrySep(String entrySep) {
+ this.entrySep = entrySep;
+ }
+
+ private String multiSep;
+
+ public void setMultiSep(String multiSep) {
+ this.multiSep = multiSep;
+ }
+
+ private String outSep;
+
+ public void setOutSep(String outSep) {
+ this.outSep = outSep;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ List<String> result = new ArrayList<>();
+ Map<String, List<String>> module2Paths = new HashMap<>();
+
+ for (String entry : value.split(Pattern.quote(entrySep))) {
+ String[] keyValue = entry.split(Pattern.quote(valueSep), 2);
+ if (keyValue.length == 1) {
+ result.add(keyValue[0]);
+ } else {
+ module2Paths.computeIfAbsent(keyValue[0], s -> new ArrayList<>())
+ .add(keyValue[1].trim());
+ }
+ }
+ module2Paths.entrySet()
+ .stream()
+ .forEach(e -> result.add(e.getKey() + valueSep + e.getValue().stream().collect(Collectors.joining(multiSep))));
+ getProject().setProperty(property, result.stream().collect(Collectors.joining(" " + entrySep)));
+ }
+
+}
+
+ </echo>
+ <echo file="${netbeans.modular.tasks.dir}/src/netbeans/ModsourceRegexp.java">
+
+package netbeans;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+public class ModsourceRegexp extends Task {
+ private String property;
+
+ public void setProperty(String property) {
+ this.property = property;
+ }
+
+ private String filePattern;
+
+ public void setFilePattern(String filePattern) {
+ this.filePattern = filePattern;
+ }
+
+ private String modsource;
+
+ public void setModsource(String modsource) {
+ this.modsource = modsource;
+ }
+
+ private List<String> expandGroup(String grp) {
+ List<String> exp = new ArrayList<>();
+ String item = "";
+ int depth = 0;
+
+ for (int i = 0; i < grp.length(); i++) {
+ char c = grp.charAt(i);
+ switch (c) {
+ case '{':
+ if (depth++ == 0) {
+ continue;
+ }
+ break;
+ case '}':
+ if (--depth == 0) {
+ exp.add(item);
+ continue;
+ }
+ break;
+ case ',':
+ if (depth == 1) {
+ exp.add(item);
+ item = "";
+ continue;
+ }
+ default:
+ break;
+ }
+ item = item + c;
+ }
+ return exp;
+ }
+
+ private List<String> pathVariants(String spec) {
+ return pathVariants(spec, new ArrayList<>());
+ }
+
+ private List<String> pathVariants(String spec, List<String> res) {
+ int start = spec.indexOf('{');
+ if (start == -1) {
+ res.add(spec);
+ return res;
+ }
+ int depth = 1;
+ int end;
+ for (end = start + 1; end < spec.length() && depth > 0; end++) {
+ char c = spec.charAt(end);
+ switch (c) {
+ case '{': depth++; break;
+ case '}': depth--; break;
+ }
+ }
+ String prefix = spec.substring(0, start);
+ String suffix = spec.substring(end);
+ expandGroup(spec.substring(start, end)).stream().forEach(item -> {
+ pathVariants(prefix + item + suffix, res);
+ });
+ return res;
+ }
+
+ private String toRegexp2(String spec, String filepattern, String separator) {
+ List<String> prefixes = new ArrayList<>();
+ List<String> suffixes = new ArrayList<>();
+ pathVariants(spec).forEach(item -> {
+ suffixes.add(item);
+ });
+ String tail = "";
+ String separatorString = separator;
+ if ("\\".equals(separatorString)) {
+ separatorString = "\\\\";
+ }
+ if (filepattern != null && !Objects.equals(filepattern, tail)) {
+ tail = separatorString + filepattern;
+ }
+ return "([^" + separatorString +"]+)\\Q" + separator + "\\E(" + suffixes.stream().collect(Collectors.joining("|")) + ")" + tail;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ getProject().setProperty(property, toRegexp2(modsource, filePattern, getProject().getProperty("file.separator")));
+ }
+
+}
+
+ </echo>
+ <echo file="${netbeans.modular.tasks.dir}/src/netbeans/ModuleInfoSelector.java">
+
+package netbeans;
+
+import java.io.File;
+import java.util.Arrays;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.selectors.BaseExtendSelector;
+
+public class ModuleInfoSelector extends BaseExtendSelector {
+
+ @Override
+ public boolean isSelected(File basedir, String filename, File file) throws BuildException {
+ String extension = Arrays.stream(getParameters())
+ .filter(p -> "extension".equals(p.getName()))
+ .map(p -> p.getValue())
+ .findAny()
+ .get();
+ return !new File(file, "module-info." + extension).exists();
+ }
+
+}
+
+ </echo>
+ <mkdir dir="${netbeans.modular.tasks.dir}/out"/>
+ <javac classpath="${ant.core.lib}" destdir="${netbeans.modular.tasks.dir}/out" srcdir="${netbeans.modular.tasks.dir}/src"/>
+ </target>
+ <target depends="-init-pre-project,-init-compile-netbeans-tasks" name="-init-project">
+ <taskdef classname="netbeans.CoalesceKeyvalue" classpath="${netbeans.modular.tasks.dir}/out" name="coalesce_keyvalue" uri="http://www.netbeans.org/ns/j2se-modular-project/1"/>
+ <taskdef classname="netbeans.ModsourceRegexp" classpath="${netbeans.modular.tasks.dir}/out" name="modsource_regexp" uri="http://www.netbeans.org/ns/j2se-modular-project/1"/>
</target>
<target name="-init-source-module-properties">
<property name="javac.modulepath" value=""/>
<property name="dist.jlink.output" value="${dist.jlink.dir}/${application.title}"/>
</target>
<target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.home" value="platforms.${platform.active}.home"/>
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.bootcp" value="platforms.${platform.active}.bootclasspath"/>
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.compiler" value="platforms.${platform.active}.compile"/>
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.javac.tmp" value="platforms.${platform.active}.javac"/>
- <condition property="platform.javac" value="${platform.home}/bin/javac">
- <equals arg1="${platform.javac.tmp}" arg2="$${platforms.${platform.active}.javac}"/>
- </condition>
- <property name="platform.javac" value="${platform.javac.tmp}"/>
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.java.tmp" value="platforms.${platform.active}.java"/>
- <condition property="platform.java" value="${platform.home}/bin/java">
- <equals arg1="${platform.java.tmp}" arg2="$${platforms.${platform.active}.java}"/>
- </condition>
- <property name="platform.java" value="${platform.java.tmp}"/>
- <j2semodularproject1:property xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" name="platform.javadoc.tmp" value="platforms.${platform.active}.javadoc"/>
- <condition property="platform.javadoc" value="${platform.home}/bin/javadoc">
- <equals arg1="${platform.javadoc.tmp}" arg2="$${platforms.${platform.active}.javadoc}"/>
- </condition>
- <property name="platform.javadoc" value="${platform.javadoc.tmp}"/>
- <condition property="platform.invalid" value="true">
- <or>
- <contains string="${platform.javac}" substring="$${platforms."/>
- <contains string="${platform.java}" substring="$${platforms."/>
- <contains string="${platform.javadoc}" substring="$${platforms."/>
- </or>
- </condition>
- <fail unless="platform.home">Must set platform.home</fail>
- <fail unless="platform.bootcp">Must set platform.bootcp</fail>
- <fail unless="platform.java">Must set platform.java</fail>
- <fail unless="platform.javac">Must set platform.javac</fail>
- <fail if="platform.invalid">
- The J2SE Platform is not correctly set up.
- Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files.
- Either open the project in the IDE and setup the Platform with the same name or add it manually.
- For example like this:
- ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file)
- or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used)
- </fail>
+ <property name="platform.java" value="${java.home}/bin/java"/>
<j2semodularproject1:modsource_regexp xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" modsource="${test.src.dir.path}" property="have.tests.test.src.dir.regexp"/>
<dirset dir="${basedir}/${test.src.dir}" id="have.tests.test.src.dir.set" includes="*/*">
<filename regex="${have.tests.test.src.dir.regexp}"/>
<j2semodularproject1:modsource_regexp xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" modsource="${test.src.dir.path}" property="have.tests.test.src.dir.regexp"/>
<dirset dir="${basedir}/${test.src.dir}" id="have.tests.test.src.dir.patchset" includes="*/*">
<filename regex="${have.tests.test.src.dir.regexp}"/>
- <scriptselector language="javascript">
- self.setSelected(!new java.io.File(file, "module-info.java").exists());
- </scriptselector>
</dirset>
<union id="have.tests.patchset">
<dirset refid="have.tests.test.src.dir.patchset"/>
<condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
<isset property="profile.available"/>
</condition>
+ <condition else="false" property="jdkBug6558476">
+ <and>
+ <matches pattern="1\.[56]" string="${java.specification.version}"/>
+ <not>
+ <os family="unix"/>
+ </not>
+ </and>
+ </condition>
+ <condition else="false" property="javac.fork">
+ <or>
+ <istrue value="${jdkBug6558476}"/>
+ <istrue value="${javac.external.vm}"/>
+ </or>
+ </condition>
<condition property="main.class.check.available">
<and>
<isset property="libs.CopyLibs.classpath"/>
</path>
</resourcecount>
</condition>
- <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+ <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" target="${javac.target}" tempdir="${java.io.tmpdir}">
<classpath>
<path path="@{classpath}"/>
</classpath>
<sequential>
<property location="${build.dir}/empty" name="empty.dir"/>
<property name="junit.forkmode" value="perTest"/>
- <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
+ <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</fileset>
</union>
<taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
- <testng classfilesetref="test.set" failureProperty="tests.failed" jvm="${platform.java}" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="notzed.zcl" testname="TestNG tests" workingDir="${work.dir}">
+ <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="notzed.zcl" testname="TestNG tests" workingDir="${work.dir}">
<xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
<propertyset>
<propertyref prefix="test-sys-prop."/>
<classpath>
<path path="@{classpath}"/>
</classpath>
- <bootclasspath>
- <path path="${platform.bootcp}"/>
- </bootclasspath>
</nbjpdastart>
</sequential>
</macrodef>
<attribute default="jvm" name="jvm"/>
<element name="customize" optional="true"/>
<sequential>
- <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" jvm="${platform.java}" module="@{modulename}">
+ <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" module="@{modulename}">
<classpath>
<path path="@{classpath}"/>
</classpath>
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
- <scriptdef language="javascript" name="coalesce_keyvalue" uri="http://www.netbeans.org/ns/j2se-modular-project/1">
- <attribute name="property"/>
- <attribute name="value"/>
- <attribute name="value-sep"/>
- <attribute name="entry-sep"/>
- <attribute name="multi-sep"/>
- <attribute name="out-sep"/>
-
-
- function coalesce(input, keyValueSeparator, multiSeparator, entrySeparator) {
- var result = [];
- var values = {};
-
- (typeof input === "string" ? input.split(entrySeparator) : input).forEach(function(entry) {
- var idx = entry.indexOf(keyValueSeparator);
- if (idx < 1) {
- result.push(entry);
- } else {
- var key = entry.substring(0, idx);
- var val = entry.substring(idx + 1);
- if (!values[key]) {
- values[key] = [];
- }
- values[key].push(val.trim());
- }
- });
- Object.keys(values).sort().forEach(function(k) {
- result.push(k + keyValueSeparator + values[k].join(multiSeparator));
- });
- return result.join(" " + entrySeparator);
- }
- self.project.setProperty(attributes.get("property"),
- coalesce(attributes.get("value"),
- attributes.get("value-sep"),
- attributes.get("entry-sep"),
- attributes.get("multi-sep")
- ));
-
-
-
- </scriptdef>
- <scriptdef language="javascript" name="modsource_regexp" uri="http://www.netbeans.org/ns/j2se-modular-project/1">
- <attribute name="property"/>
- <attribute name="filePattern"/>
- <attribute name="modsource"/>
- function expandGroup(grp) {
- var exp = [];
- var item = "";
- var depth = 0;
-
- for (i = 0; i < grp.length; i++) {
- var c = grp[i];
- switch (c) {
- case '{':
- if (depth++ === 0) {
- continue;
- }
- break;
- case '}':
- if (--depth === 0) {
- exp.push(item);
- continue;
- }
- break;
- case ',':
- if (depth === 1) {
- exp.push(item);
- item = "";
- continue;
- }
- default:
- break;
- }
- item = item + c;
- }
- return exp;
- }
-
- function pathVariants(spec, res) {
- res = res || [];
- var start = spec.indexOf('{');
- if (start === -1) {
- res.push(spec);
- return res;
- }
- var depth = 1;
- var end;
- for (end = start + 1; end < spec.length && depth > 0; end++) {
- var c = spec[end];
- switch (c) {
- case '{': depth++; break;
- case '}': depth--; break;
- }
- }
- var prefix = spec.substring(0, start);
- var suffix = spec.substring(end);
- expandGroup(spec.slice(start, end)).forEach(function (item) {
- pathVariants(prefix + item + suffix, res);
- })
- return res;
- }
-
- function toRegexp2(spec, filepattern, separator) {
- var prefixes = [];
- var suffixes = [];
- pathVariants(spec).forEach(function(item) {
- suffixes.push(item);
- });
- var tail = "";
- var separatorString = separator;
- if (separatorString == "\\") {
- separatorString = "\\\\";
- }
- if (filepattern && filepattern != tail) {
- tail = separatorString + filepattern;
- }
- return "([^" + separatorString +"]+)\\Q" + separator + "\\E(" + suffixes.join("|") + ")" + tail;
- }
- self.project.setProperty(attributes.get("property"),
- toRegexp2(attributes.get("modsource"), attributes.get("filepattern"), self.project.getProperty("file.separator")));
-
-
-
-
- </scriptdef>
<target if="do.depend.true" name="-compile-depend">
<pathconvert property="build.generated.subdirs">
<dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
<isset property="main.class.available"/>
</and>
</condition>
- <property name="platform.jlink" value="${platform.home}/bin/jlink"/>
- <property name="jlink.systemmodules.internal" value="${platform.home}/jmods"/>
+ <property name="platform.jlink" value="${jdk.home}/bin/jlink"/>
+ <property name="jlink.systemmodules.internal" value="${jdk.home}/jmods"/>
<exec executable="${platform.jlink}">
<arg value="--module-path"/>
<arg path="${jlink.systemmodules.internal}:${run.modulepath}:${dist.dir}"/>
</not>
</and>
</condition>
- <exec executable="${platform.java}" failonerror="false" outputproperty="platform.version.output">
- <arg value="-version"/>
- </exec>
<condition else="" property="bug5101868workaround" value="*.java">
- <matches multiline="true" pattern="1\.[56](\..*)?" string="${platform.version.output}"/>
+ <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
</condition>
<condition else="" property="javadoc.html5.cmd.line.arg" value="-html5">
<and>
<isset property="javadoc.html5"/>
- <available file="${platform.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
+ <available file="${jdk.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
</and>
</condition>
- <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" executable="${platform.javadoc}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+ <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
<classpath>
<path path="${javac.classpath}"/>
</classpath>
</pathconvert>
<pathconvert pathsep=" " property="run.test.patchmodules.list">
<dirset dir="${build.test.modules.dir}" includes="*">
- <scriptselector language="javascript">
- self.setSelected(!new java.io.File(file, "module-info.class").exists());
- </scriptselector>
+ <custom classname="netbeans.ModuleInfoSelector" classpath="${netbeans.modular.tasks.dir}/out">
+ <param name="extension" value="class"/>
+ </custom>
</dirset>
<chainedmapper>
<filtermapper>
<regexpmapper from=".*\Q${file.separator}\E([^${file.separator.string}]+)$" to="--patch-module \1=\0"/>
</chainedmapper>
</pathconvert>
- <j2semodularproject1:coalesce_keyvalue xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" entry-sep="${path.separator}" multi-sep="--patch-module " property="run.test.patchmodules" value="${run.test.patchmodules.list}" value-sep="="/>
+ <j2semodularproject1:coalesce_keyvalue xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" entrySep="--patch-module " multiSep="${path.separator}" property="run.test.patchmodules" value="${run.test.patchmodules.list}" valueSep="="/>
<condition else="" property="run.test.addmodules.internal" value="--add-modules ${run.test.addmodules.list}">
<isset property="run.test.addmodules.list"/>
</condition>
</filtermapper>
</chainedmapper>
</pathconvert>
- <j2semodularproject1:coalesce_keyvalue xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" entry-sep="${path.separator}" multi-sep="--patch-module " property="compile.test.patchmodules" value="${compile.test.patchmodule.internal}" value-sep="="/>
+ <j2semodularproject1:coalesce_keyvalue xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1" entrySep="--patch-module " multiSep="${path.separator}" property="compile.test.patchmodules" value="${compile.test.patchmodule.internal}" valueSep="="/>
<property name="javac.test.moduleargs" value="${compile.test.patchmodules} ${compile.test.addreads}"/>
</target>
<target depends="-init-test-javac-module-properties" name="-init-test-module-properties">
</target>
<target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
<target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+ <target depends="debug-test-method" name="debug-single-method"/>
<target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
<property name="debug.modules.dir" value="${build.test.modules.dir}"/>
<j2semodularproject1:nbjpdareload xmlns:j2semodularproject1="http://www.netbeans.org/ns/j2se-modular-project/1"/>
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
- <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+ <target name="-recompile-netbeans-tasks-after-clean">
+ <antcall inheritall="false" target="-init-compile-netbeans-tasks"/>
+ </target>
+ <target depends="init,deps-clean,-do-clean,-recompile-netbeans-tasks-after-clean,-post-clean" description="Clean build products." name="clean"/>
<target name="-check-call-dep">
<property file="${call.built.properties}" prefix="already.built."/>
<condition property="should.call.dep">