From 12724f6c5852e474f5d5329e07b4268410d643b6 Mon Sep 17 00:00:00 2001 From: mariofusco Date: Tue, 17 Sep 2013 15:22:07 +0200 Subject: [PATCH] [BZ-1007055] use kieproject classloader also to compile java classes --- .../kie/builder/impl/AbstractKieModule.java | 13 +++++----- .../kie/builder/impl/InternalKieModule.java | 2 +- .../kie/builder/impl/KieBuilderImpl.java | 25 +++++++++++++------ .../compiler/kproject/xml/PomModel.java | 9 ++++--- .../builder/xml/PomModelParserTest.java | 2 +- .../kie/scanner/MavenClassLoaderResolver.java | 3 ++- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/AbstractKieModule.java b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/AbstractKieModule.java index 09161f546b9..d5ade7612ed 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/AbstractKieModule.java +++ b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/AbstractKieModule.java @@ -5,12 +5,10 @@ import java.io.ByteArrayInputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; @@ -65,8 +63,6 @@ public abstract class AbstractKieModule private Map kieDependencies; - private List jarDependencies; - // this is a { KBASE_NAME -> DIALECT -> ( RESOURCE, BYTECODE ) } cache protected Map>> compilationCache = new HashMap>>(); @@ -94,11 +90,11 @@ public void addKieDependency(InternalKieModule dependency) { kieDependencies.put(dependency.getReleaseId(), dependency); } - public List getJarDependencies() { + public Collection getJarDependencies() { if( pomModel == null ) { getPomModel(); } - List deps = null; + Collection deps = null; if( pomModel != null ) { deps = pomModel.getDependencies(); } @@ -242,7 +238,6 @@ private static void getTransitiveIncludes(KieProject kieProject, KieBaseModelImp private static void addFiles(Map assets, KieBaseModel kieBaseModel, InternalKieModule kieModule) { - int fileCount = 0; for (String fileName : kieModule.getFileNames()) { if (filterFileInKBase(kieBaseModel, fileName) && !fileName.endsWith(".properties")) { assets.put(fileName, kieModule); @@ -343,6 +338,10 @@ public PomModel getPomModel() { return pomModel; } + public void setPomModel(PomModel pomModel) { + this.pomModel = pomModel; + } + private void validatePomModel(PomModel pomModel) { ReleaseId pomReleaseId = pomModel.getReleaseId(); if (StringUtils.isEmpty(pomReleaseId.getGroupId()) || StringUtils.isEmpty(pomReleaseId.getArtifactId()) || StringUtils.isEmpty(pomReleaseId.getVersion())) { diff --git a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/InternalKieModule.java b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/InternalKieModule.java index a9998383f7d..fa924e56306 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/InternalKieModule.java +++ b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/InternalKieModule.java @@ -35,7 +35,7 @@ public interface InternalKieModule extends KieModule { void addKieDependency(InternalKieModule dependency); - List getJarDependencies(); + Collection getJarDependencies(); boolean isAvailable( final String pResourceName ); diff --git a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java index ba2be41057d..70427ab93a9 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java +++ b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java @@ -45,6 +45,7 @@ import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieModule; +import org.kie.api.builder.Message; import org.kie.api.builder.Message.Level; import org.kie.api.builder.ReleaseId; import org.kie.api.builder.Results; @@ -165,8 +166,6 @@ public KieBuilder buildAll() { if ( !isBuilt() && kModuleModel != null ) { trgMfs = new MemoryFileSystem(); writePomAndKModule(); - - compileJavaClasses(); addKBasesFilesToTrg(); kModule = new MemoryKieModule( releaseId, @@ -178,8 +177,14 @@ public KieBuilder buildAll() { kModule.addKieDependency( (InternalKieModule) kieModule ); } } + if (pomModel != null) { + kModule.setPomModel(pomModel); + } + + KieModuleKieProject kProject = new KieModuleKieProject( kModule ); + compileJavaClasses(kProject.getClassLoader()); - if ( buildKieModule( kModule, results ) ) { + if ( buildKieProject( kModule, results, kProject ) ) { writeKieModuleMetaInfo( generateKieModuleMetaInfo() ); } } @@ -292,12 +297,15 @@ private void writeKieModuleMetaInfo(KieModuleMetaInfo info) { public static boolean buildKieModule(InternalKieModule kModule, ResultsImpl messages ) { - KieModuleKieProject kProject = new KieModuleKieProject( kModule ); + return buildKieProject(kModule, messages, new KieModuleKieProject( kModule )); + } + + private static boolean buildKieProject(InternalKieModule kModule, ResultsImpl messages, KieModuleKieProject kProject) { kProject.init(); - kProject.verify( messages ); + kProject.verify(messages); if ( messages.filterMessages( Level.ERROR ).isEmpty() ) { - KieServices.Factory.get().getRepository().addKieModule( kModule ); + KieServices.Factory.get().getRepository().addKieModule(kModule); return true; } return false; @@ -541,7 +549,7 @@ public static String generatePomProperties(ReleaseId releaseId) { return sBuilder.toString(); } - private void compileJavaClasses() { + private void compileJavaClasses(ClassLoader classLoader) { List classFiles = new ArrayList(); for ( String fileName : srcMfs.getFileNames() ) { if ( fileName.endsWith( ".class" ) ) { @@ -569,7 +577,8 @@ private void compileJavaClasses() { EclipseJavaCompiler compiler = createCompiler( "src/main/java/" ); CompilationResult res = compiler.compile( sourceFiles, srcMfs, - trgMfs ); + trgMfs, + classLoader ); for ( CompilationProblem problem : res.getErrors() ) { results.addMessage( problem ); diff --git a/drools-compiler/src/main/java/org/drools/compiler/kproject/xml/PomModel.java b/drools-compiler/src/main/java/org/drools/compiler/kproject/xml/PomModel.java index 9f8953d9e7f..b8fcb2fa9aa 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/kproject/xml/PomModel.java +++ b/drools-compiler/src/main/java/org/drools/compiler/kproject/xml/PomModel.java @@ -2,14 +2,15 @@ import org.kie.api.builder.ReleaseId; -import java.util.ArrayList; -import java.util.List; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; public class PomModel { private ReleaseId releaseId; private ReleaseId parentReleaseId; - private List dependencies = new ArrayList(); + private Set dependencies = new HashSet(); public ReleaseId getReleaseId() { @@ -28,7 +29,7 @@ public void setParentReleaseId(ReleaseId parentReleaseId) { this.parentReleaseId = parentReleaseId; } - public List getDependencies() { + public Collection getDependencies() { return dependencies; } diff --git a/drools-compiler/src/test/java/org/drools/compiler/builder/xml/PomModelParserTest.java b/drools-compiler/src/test/java/org/drools/compiler/builder/xml/PomModelParserTest.java index a476d745788..b98ebc4fa25 100644 --- a/drools-compiler/src/test/java/org/drools/compiler/builder/xml/PomModelParserTest.java +++ b/drools-compiler/src/test/java/org/drools/compiler/builder/xml/PomModelParserTest.java @@ -27,7 +27,7 @@ public void parsePom() { assertEquals( "parentVersion", pomModel.getParentReleaseId().getVersion() ); assertEquals( 1, pomModel.getDependencies().size() ); - ReleaseId dep = pomModel.getDependencies().get(0); + ReleaseId dep = pomModel.getDependencies().iterator().next(); assertEquals( "dep1GroupId", dep.getGroupId() ); assertEquals( "dep1ArtifactId", dep.getArtifactId() ); assertEquals( "dep1Version", dep.getVersion() ); diff --git a/kie-ci/src/main/java/org/kie/scanner/MavenClassLoaderResolver.java b/kie-ci/src/main/java/org/kie/scanner/MavenClassLoaderResolver.java index 8e14d8a7df1..f4012f9ae88 100644 --- a/kie-ci/src/main/java/org/kie/scanner/MavenClassLoaderResolver.java +++ b/kie-ci/src/main/java/org/kie/scanner/MavenClassLoaderResolver.java @@ -7,6 +7,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.ProtectionDomain; +import java.util.Collection; import java.util.List; import org.drools.compiler.kie.builder.impl.InternalKieModule; @@ -43,7 +44,7 @@ public ClassLoader getClassLoader(KieModule kmodule) { parent = MavenClassLoaderResolver.class.getClassLoader(); } - List jarDependencies = ((InternalKieModule)kmodule).getJarDependencies(); + Collection jarDependencies = ((InternalKieModule)kmodule).getJarDependencies(); ArtifactResolver resolver = ArtifactResolver.getResolverFor(kmodule.getReleaseId(),true); URL[] urls = new URL[jarDependencies.size()];