aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-03-15 21:39:55 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2016-03-20 20:35:26 -0400
commiteaa4889b40bfe1fcab5f88d87b5208632d736444 (patch)
treed9032630e4aba1cc59982d2b50950f11a330eea9
parentc359862021c187e680c9b3f687ab149f7ef6b7b0 (diff)
downloadcbt-eaa4889b40bfe1fcab5f88d87b5208632d736444.tar.gz
cbt-eaa4889b40bfe1fcab5f88d87b5208632d736444.tar.bz2
cbt-eaa4889b40bfe1fcab5f88d87b5208632d736444.zip
better handle classloaders for watchservice and reflect. even more speedup.
-rw-r--r--nailgun_launcher/NailgunLauncher.java11
-rw-r--r--stage1/Stage1.scala31
2 files changed, 32 insertions, 10 deletions
diff --git a/nailgun_launcher/NailgunLauncher.java b/nailgun_launcher/NailgunLauncher.java
index d14e968..1eb39a8 100644
--- a/nailgun_launcher/NailgunLauncher.java
+++ b/nailgun_launcher/NailgunLauncher.java
@@ -72,15 +72,16 @@ public class NailgunLauncher{
return;
}
- new URLClassLoader(
+ ClassLoader cl = new URLClassLoader(
new URL[]{ new URL("file:"+STAGE1+TARGET) },
classLoaderCacheValues.get(
classLoaderCacheKeys.get( NAILGUN+TARGET )
)
- )
- .loadClass("cbt.Stage1")
- .getMethod("main", String[].class)
- .invoke( null/* _cls.newInstance()*/, (Object) args );
+ );
+
+ cl.loadClass("cbt.Stage1")
+ .getMethod("main", String[].class, ClassLoader.class)
+ .invoke( null/* _cls.newInstance()*/, (Object) args, cl);
}
}
diff --git a/stage1/Stage1.scala b/stage1/Stage1.scala
index b1017f7..69fc372 100644
--- a/stage1/Stage1.scala
+++ b/stage1/Stage1.scala
@@ -37,7 +37,7 @@ object Stage1{
a.lastModified > b.lastModified
}
- def main(args: Array[String]): Unit = {
+ def main(args: Array[String], classLoader: ClassLoader): Unit = {
val mainClass = if(args contains "admin") "cbt.AdminStage2" else "cbt.Stage2"
val init = new Init(args)
val lib = new Stage1Lib(init.logger)
@@ -53,18 +53,39 @@ object Stage1{
val classLoaderCache = new ClassLoaderCache(logger)
+ val deps = ClassPath.flatten(
+ Seq(
+ JavaDependency("net.incongru.watchservice","barbary-watchservice","1.0"),
+ JavaDependency("org.scala-lang","scala-reflect",constants.scalaVersion),
+ ScalaDependency(
+ "org.scala-lang.modules", "scala-xml", "1.0.5", scalaVersion=constants.scalaMajorVersion
+ ),
+ JavaDependency("org.eclipse.jgit", "org.eclipse.jgit", "4.2.0.201601211800-r")
+ ).map(_.classpath)
+ )
+
logger.stage1("before conditionally running zinc to recompile CBT")
if( src.exists(newerThan(_, changeIndicator)) ) {
- val stage1Classpath = CbtDependency()(logger).dependencyClasspath
- logger.stage1("cbt.lib has changed. Recompiling with cp: " ++ stage1Classpath.string)
- zinc( true, src, stage2Target, stage1Classpath, classLoaderCache, Seq("-deprecation") )( zincVersion = "0.3.9", scalaVersion = constants.scalaVersion )
+ logger.stage1("cbt.lib has changed. Recompiling.")
+ zinc( true, src, stage2Target, nailgunTarget +: stage1Target +: deps, classLoaderCache, Seq("-deprecation") )( zincVersion = "0.3.9", scalaVersion = constants.scalaVersion )
}
logger.stage1(s"[$now] calling CbtDependency.classLoader")
+ val cp = stage2Target
+ val cl = classLoaderCache.transient.get(
+ (stage2Target +: deps).string,
+ cbt.URLClassLoader(
+ ClassPath(Seq(stage2Target)),
+ classLoaderCache.persistent.get(
+ deps.string,
+ cbt.URLClassLoader( deps, classLoader )
+ )
+ )
+ )
logger.stage1(s"[$now] Run Stage2")
val ExitCode(exitCode) = /*trapExitCode*/{ // this
- runMain( mainClass, cwd +: args.drop(1).toVector, CbtDependency()(logger).classLoader(classLoaderCache) )
+ runMain( mainClass, cwd +: args.drop(1).toVector, cl )
}
logger.stage1(s"[$now] Stage1 end")
System.exit(exitCode)