Apache NetBeans
Apache NetBeans
Latest release

Apache NetBeans 23

Download

How can I have my application compiled in a specific version of the platform ?

Now the platform can be downloaded on demand! Just update your platform.properties files as follows:

# NOTE: You must remove the nbplatform.default line which might already exist in this file.
# Also note that editing the properties of your suite via the suite customizer (dialog)
# can add that line back in, so you'll need to watch for this and delete it again in this case.
nbplatform.active=custom
nbplatform=7.2

# Where the suite is located; you don't need to change this.  It exists
# to allow us to use relative paths for the other values
suite.dir=${basedir}

# Classpath-like list of absolute or relative paths to individual clusters
# against which you want your suite to build; Note that you can use
# "bare", i.e. not numbered cluster names, which simplifies later transitions
# to newer version of the platform. E.g: ${nbplatform.active.dir}/nb
cluster.path=\
    ${nbplatform.active.dir}/extra:\
    ${nbplatform.active.dir}/ide:\
    ${nbplatform.active.dir}/nb:\
    ${nbplatform.active.dir}/platform:\
    ${nbplatform.active.dir}/sappy
# Path to the build harness you want to use. This is typically in the
# harness subdirectory of your platform, but you could point to a directory
# containing customized build scripts if you want to.
harness.dir=${nbplatform.custom.netbeans.dest.dir}/harness

nbplatform.custom.netbeans.dest.dir=${suite.dir}/netbeans_platform_${nbplatform}
bootstrap.url=http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar
autoupdate.catalog.url=http://updates.netbeans.org/netbeans/updates/${nbplatform}/uc/final/distribution/catalog.xml.gz

All the magic is done by the new platform.xml file that has been recently added. In cases where you need to get updates from other URL’s I made the following changes to the platform.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<project name="platform" default="download" basedir="..">
    <import file="../preparation.xml"/>

    <fileset dir="${nbplatform.custom.netbeans.dest.dir}" id="platform.path"/>
    <mkdir dir="${nbplatform.custom.netbeans.dest.dir}"/>
    <pathconvert refid="platform.path"
                 property="platform.notempty"
                 setonempty="false"/>

    <condition property="download.enabled">
        <and>
            <isset property="bootstrap.url"/>
            <isset property="autoupdate.catalog.url"/>
            <not>
                <isset property="platform.notempty"/>
            </not>
        </and>
    </condition>

    <condition property="download.harness.required">
        <and>
            <not>
                <available file="${harness.dir}/suite.xml"/>
            </not>
            <isset property="download.enabled"/>
        </and>
    </condition>

    <target name="download-harness" if="download.harness.required">
        <mkdir dir="${harness.dir}"/>
        <autoupdate installdir="${nbplatform.active.dir}" updatecenter="${autoupdate.catalog.url}">
            <modules includes="org[.]netbeans[.]modules[.]apisupport[.]harness" clusters="harness"/>
        </autoupdate>
    </target>

    <target name="download" depends="-init-netbeans, -init-hudson" if="download.enabled">
        <pathconvert pathsep="|" property="download.clusters">
            <mapper type="flatten"/>
            <path path="${cluster.path}"/>
        </pathconvert>
        <property name="disabled.modules" value=""/>
        <pathconvert property="module.includes" pathsep="">
            <mapper type="glob" from="${basedir}${file.separator}*" to="(?!\Q*\E)"/>
            <path>
                <filelist files="${disabled.modules}" dir="."/>
            </path>
        </pathconvert>
        <property file="nbproject/platform.properties" prefix="urls."/>
        <propertyselector property="urls" match="urls.autoupdate.catalog\.(.*)" select="\1"/>

        <property file="nbproject/platform.properties"/>
        <echo message="Downloading clusters ${download.clusters}"/>
        <property name="tasks.jar" location="${java.io.tmpdir}/tasks.jar"/>
        <get src="${bootstrap.url}" dest="${tasks.jar}" usetimestamp="true" verbose="true"/>
        <taskdef name="autoupdate" classname="org.netbeans.nbbuild.AutoUpdate" classpath="${tasks.jar}"/>
        <antcall target="download-harness"/>
        <for list="${urls}" param="url">
            <sequential>
                <echo message="Attempting to download plug-ins from ${autoupdate.catalog.@{url}}" />
                <download-platform url="${autoupdate.catalog.@{url}}"/>
            </sequential>
        </for>
        <echo>Installing plug-ins from ../netbeans</echo>
        <mkdir dir="${nbplatform.active.dir}/extra"/>
        <autoupdate todir="${nbplatform.active.dir}/extra">
            <nbms dir="../netbeans">
                <include name="*.nbm"/>
            </nbms>
            <modules includes=".+"/>
        </autoupdate>
    </target>

    <macrodef name="download-platform">
        <attribute name="url"/>
        <sequential>
            <autoupdate installdir="${nbplatform.active.dir}" updatecenter="@{url}">
                <modules includes="${module.includes}.*" clusters="${download.clusters}"/>
                <modules includes="org[.]netbeans[.]modules[.]apisupport[.]harness" clusters="harness"/>
            </autoupdate>
        </sequential>
    </macrodef>
</project>

Here’s the imported preparation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="MSM-Preparation" basedir=".">
    <description>Prepares the environment to build the module suite MSM.</description>
    <!--Don't modify this file unless you know what you are doing-->
    <property name="ant-contrib-filename" value="ant-contrib-1.0b3.jar"/>
    <property file="nbproject/project.properties"/>
    <property file="nbproject/platform.properties"/>
    <property name="platform.dir" value="../netbeans/"/>
    <property name="lib.dir" value="${suite.dir}/../Simple Libs/tools"/>

    <scriptdef name="substring" language="javascript">
        <attribute name="text" />
        <attribute name="start" />
        <attribute name="end" />
        <attribute name="property" />
     <![CDATA[
       var text = attributes.get("text");
       var start = attributes.get("start");
       var end = attributes.get("end") || text.length;
       project.setProperty(attributes.get("property"), text.substring(start, end));
     ]]>
    </scriptdef>

    <target name="-check-env" depends="-getAntContribJar">
        <condition property="isNetbeans">
            <not>
                <isset property="Hudson"/>
            </not>
        </condition>
        <property name="xmltasks-loc" value="${lib.dir}/xmltask.jar"/>
        <available file="${xmltasks-loc}" property="xmltasks.present"/>
        <fail unless="xmltasks.present" message="The xmltasks jar doesn't exist at: ${xmltasks-loc}, can't build. Check your settings!" />
        <taskdef name="xmltask"
                 classname="com.oopsconsultancy.xmltask.ant.XmlTask">
            <classpath>
                <pathelement location="${xmltasks-loc}"/>
            </classpath>
        </taskdef>
    </target>

    <target name="-getAntContribJar">
        <fileset id="ant-contrib-jar" dir="${lib.dir}">
            <include name="ant-contrib-*.jar" />
        </fileset>
        <pathconvert property="ant-contrib-jar" refid="ant-contrib-jar" pathsep="," />
        <basename property="ant-contrib-filename" file="${ant-contrib-jar}"/>
    </target>

    <target name="-init-netbeans" depends="-check-env" if="isNetbeans">
        <echo>Configuring ant-contrib for Netbeans use...</echo>
        <property name="ant-contrib-loc" value="${lib.dir}/${ant-contrib-filename}"/>
        <available file="${ant-contrib-loc}" property="ant-contrib.present"/>
        <fail unless="ant-contrib.present" message="The ant-contrib jar doesn't exist at: ${ant-contrib-loc}, can't build. Check your settings!" />
        <!--We are in not Hudson-->
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
    </target>

    <target name="-init-hudson" depends="-check-env" unless="isNetbeans">
        <echo>Configuring ant-contrib for Hudson use...</echo>
        <!--Import Hudson environment variables-->
        <property environment="env"/>
        <property name="ant-contrib-loc" value="${env.ANT_HOME}/lib/${ant-contrib-filename}"/>
        <available file="${ant-contrib-loc}" property="ant-contrib.present"/>
        <fail unless="ant-contrib.present" message="The ant-contrib jar doesn't exist at: ${ant-contrib-loc}, can't build. Check your settings!" />
        <!--Define it. For some reason the approach in -init-netbeans doesn't work in Hudson.-->
        <taskdef name="for" classname="net.sf.antcontrib.logic.ForTask">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
        <taskdef name="propertyregex" classname="net.sf.antcontrib.property.RegexTask">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
        <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
        <taskdef name="math" classname="net.sf.antcontrib.math.MathTask">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
        <taskdef name="var" classname="net.sf.antcontrib.property.Variable">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
        <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach">
            <classpath>
                <pathelement location="${ant-contrib-loc}"/>
            </classpath>
        </taskdef>
    </target>

    <target name="module-fix-dependencies">
        <ant antfile= "${suite.dir}/versions.xml" target="fix"/>
    </target>

    <!-- iterate finds all build files, excluding this one and invokes the named target -->
    <macrodef name="iterate">
        <attribute name="target"/>
        <sequential>
            <subant target="@{target}">
                <fileset dir="."
                         includes="**/*/build.xml"
                         excludes="build.xml"/>
            </subant>
        </sequential>
    </macrodef>
</project>

After this you can add alternate update centers and it’ll look for nbms on those sites as well. Just add the additional URLS in the platform.properties as follows:

autoupdate.catalog.url1=url1
autoupdate.catalog.url2=url2
.
.
.
autoupdate.catalog.urlx=urlx