DevFaqAutomaticPlatformDownload
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