From: Eric P. <th...@us...> - 2010-09-07 17:02:25
|
Update of /cvsroot/sandev/sand/platform/sandbuild/src/org/sandev/sandbuild In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv8696 Modified Files: BridgeAnt2SAND.java Log Message: Added verifyBuildTasksLoaded as a debug point and quick fail if SAND is not loaded properly. Index: BridgeAnt2SAND.java =================================================================== RCS file: /cvsroot/sandev/sand/platform/sandbuild/src/org/sandev/sandbuild/BridgeAnt2SAND.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** BridgeAnt2SAND.java 30 Nov 2005 04:11:00 -0000 1.1.1.1 --- BridgeAnt2SAND.java 7 Sep 2010 17:02:17 -0000 1.2 *************** *** 1,5 **** /* * SAND development/deployment environment ! * Copyright (C) 2003 SAND Services Inc. * * This library is free software; you can redistribute it and/or --- 1,5 ---- /* * SAND development/deployment environment ! * Copyright (C) 2003,2010 SAND Services Inc. * * This library is free software; you can redistribute it and/or *************** *** 20,23 **** --- 20,26 ---- package org.sandev.sandbuild; + import java.net.URLClassLoader; + import java.net.URL; + import org.apache.tools.ant.Task; import org.apache.tools.ant.BuildException; *************** *** 51,61 **** { try { ! SandBuildDriver sbd=SandBuildDriver.getSandBuildDriver(); String target=getEntry(); if(target.equals("all")) { sbd.setScope(SandBuildDriver.SCOPE_GLOBAL); sbd.setType(SandBuildDriver.TYPE_ALL); sbd.setMode(SandBuildDriver.MODE_BUILD); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 54,67 ---- { try { ! verifyBuildTasksLoaded(); String target=getEntry(); + String projname=getProject().getName(); + //System.out.println("BridgeAnt2SAND " + projname + " " + target); + SandBuildDriver sbd=SandBuildDriver.getSandBuildDriver(); if(target.equals("all")) { sbd.setScope(SandBuildDriver.SCOPE_GLOBAL); sbd.setType(SandBuildDriver.TYPE_ALL); sbd.setMode(SandBuildDriver.MODE_BUILD); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 65,69 **** sbd.setType(SandBuildDriver.TYPE_STATIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 71,75 ---- sbd.setType(SandBuildDriver.TYPE_STATIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 73,77 **** sbd.setType(SandBuildDriver.TYPE_STATIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 79,83 ---- sbd.setType(SandBuildDriver.TYPE_STATIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 81,85 **** sbd.setType(SandBuildDriver.TYPE_DYNAMIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 87,91 ---- sbd.setType(SandBuildDriver.TYPE_DYNAMIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 89,93 **** sbd.setType(SandBuildDriver.TYPE_DYNAMIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 95,99 ---- sbd.setType(SandBuildDriver.TYPE_DYNAMIC); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 97,101 **** sbd.setType(SandBuildDriver.TYPE_ALL); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(getProject().getName()); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); --- 103,107 ---- sbd.setType(SandBuildDriver.TYPE_ALL); sbd.setMode(SandBuildDriver.MODE_CLEAN); ! SandProject sp=new SandProject(projname); sp.setAntProject(getProject()); sbd.setBuildRoot(sp); *************** *** 104,108 **** //The project will already exist from when it was added by //the requiredproject processing. It needs the runtime access - String projname=getProject().getName(); SandProject sp=sbd.findProject(projname); if(sp==null) { --- 110,113 ---- *************** *** 116,119 **** --- 121,180 ---- } + + //////////////////////////////////////// + // Implementation + //////////////////////////////////////// + + /** + * Verify SAND build classes are loaded at the top library level. + * The SAND build makes use of a singleton SandBuildDriver + * instance to coordinate dependent projects. For this to work, + * all the SAND build custom tasks need to be loaded into the same + * ClassLoader at a common root level so we don't end up with + * multiple instances in multiple ClassLoaders. The logical place + * is wherever the core ant library classes are, since that is + * what they work with. + * + * This method was intended to walk the ClassLoader tree to find + * where the ant classes are and then add our own classes to the + * same area, but of course the ClassLoader contents are + * essentially immutable for security reasons so that doesn't + * work. But this method is still useful as a debugging point + * and to provide an early warning system if the classes are + + Walk up the ClassLoader tree to find + * where, then load our custom classes if not loaded already. + */ + protected void verifyBuildTasksLoaded() + throws BuildException + { + ClassLoader cl=Thread.currentThread().getContextClassLoader(); + //ClassLoader tempcl=cl; + //System.out.println("verifyBuildTasksLoaded ClassLoader: " + tempcl); + //while(tempcl!=null) { + // tempcl=tempcl.getParent(); + // System.out.println(" child of: " + tempcl); } + //if(cl instanceof URLClassLoader) { + // System.out.println("Current URLs for URLClassLoader:"); + // URLClassLoader urlcl=(URLClassLoader)cl; + // URL[] urls=urlcl.getURLs(); + // for(int i=0;i<urls.length;i++) { + // System.out.println(" " + urls[i]); } } + try { + //cl.loadClass("org.sandev.sandbuild.BridgeAnt2SAND"); //self + cl.loadClass("org.sandev.sandbuild.RequiredProject"); + cl.loadClass("org.sandev.sandbuild.SandEnvFile"); + cl.loadClass("org.sandev.sandbuild.SandGenDecl"); + cl.loadClass("org.sandev.sandbuild.SandJavadoc"); + cl.loadClass("org.sandev.sandbuild.SandManifest"); + cl.loadClass("org.sandev.sandbuild.SandUIDeployment"); + cl.loadClass("org.sandev.sandbuild.SandPersistDef"); + cl.loadClass("org.sandev.sandbuild.SandPackager"); + } catch(ClassNotFoundException e) { + throw new BuildException("The sandbuild classes need to be " + + "loaded. " + e); + } + } + } |