[ https://issues.apache.org/jira/browse/ARIES-1772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16370244#comment-16370244 ]
Daniel Estermann commented on ARIES-1772: ----------------------------------------- Hi Dominik, thank you for your work so far. I found out that the problem occurs also with the transitive dependencies of the provided dependencies. The situation I have is following: {code:xml} <project> <artifactId>A</artifactId> <build><dependencies><dependency> <artifactId>B</artifactId> <scope>provided</scope> </dependency></dependencies></build> </project>{code} {code:xml} <project> <artifactId>B</artifactId> <build><dependencies><dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>${version.jersey}</version> </dependency></dependencies></build> </project> {code} Trying to build project A results in: {code:java} [ERROR] Failed to execute goal org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate (default) on project portal-backend: Execution default of goal org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate failed: A required class was missing while executing org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate: com/fasterxml/jackson/jaxrs/json/JacksonJaxbJsonProvider [ERROR] ----------------------------------------------------- [ERROR] realm = plugin>org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0 [ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy [ERROR] urls[0] = file:/d:/.m2/repository/org/apache/aries/blueprint/blueprint-maven-plugin/1.9.0/blueprint-maven-plugin-1.9.0.jar ...skipped... ...jersey-media-json-jackson is missing here... [ERROR] urls[44] ... [ERROR] Number of foreign imports: 1 [ERROR] import: Entry[import from realm ClassRealm[project>com.seeburger.portal:portal-backend:2.50.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]] [ERROR] [ERROR] -----------------------------------------------------: com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider {code} I looked at the code of the plugin and noticed two things, which are related to the error. # The filtering of the scanned classes using the scanPath parameter happens +after+ the scanning. FilteredClassFinder.findClasses(...) find the annotated classes first and then applies the filter by calling filterByBasePackages(..). That's why I cannot really constraint the scanning via that parameter. {code:java} org.apache.aries.blueprint.plugin.FilteredClassFinder:36 private static Set<Class<?>> findClasses(ClassFinder finder, Collection<String> packageNames, Class<? extends Annotation>[] annotations) { Set<Class<?>> rawClasses = new HashSet<Class<?>>(); for (Class<? extends Annotation> annotation : annotations) { rawClasses.addAll(finder.findAnnotatedClasses(annotation)); } return filterByBasePackages(rawClasses, packageNames); }{code} # The ClassFinder gets initialized using a URLClassLoader, which contains a set of JARs including the transitive dependencies of the provided dependencies. {code:java} org.apache.aries.blueprint.plugin.GenerateMojo:175 private ClassFinder createProjectScopeFinder() { for (Object artifactO : project.getArtifacts()) { //... urls.add(file.toURI().toURL()); } ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader()); return new ClassFinder(loader, urls); }{code} Project.getArtifacts() returns 120 objects while the amount of jar on the build classpath is 45. Especially jersey-media-json-jackson.jar containing JacksonJaxbJsonProvider is one of the JARs returned by getArtifacts(). No idea why that happens, maybe bug in maven? I use Maven 3.2.1 for CI and 3.5.2 locally, if that matters. !test.png! > Add an option to blueprint-maven-plugin to exclude dependencies. > ---------------------------------------------------------------- > > Key: ARIES-1772 > URL: https://issues.apache.org/jira/browse/ARIES-1772 > Project: Aries > Issue Type: New Feature > Components: Blueprint > Affects Versions: blueprint-maven-plugin-1.9.0 > Reporter: Daniel Estermann > Assignee: Dominik Przybysz > Priority: Major > Attachments: test.png, test.png > > > Currently the list of scanned classes by blueprint-maven-plugin can be > restricted using scanPath parameter, so the list can also contain the classes > of the project dependencies. With my projects I experience two kind of issues > with it: > * If the the scan path is chosen too widely it may lead to a build failure. > For example: Assume project A has a dependency to project B an both have the > same base package, which is chosen as the scan path. Project B has a > blueprint bean, which implements an interface from some +provided+ dependency > of it. The build of project A will fail then, because it will try to scan a > blueprint bean of project B but it will miss its provided dependency. An > example error message: > > {code:java} > Failed to execute goal > org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate > (default) on project email-template-editor-core: Execution default of goal > org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate > failed: A required class was missing while executing > org.apache.aries.blueprint:blueprint-maven-plugin:1.9.0:blueprint-generate: > com/mycorporation/scheduler/api/ScheduledService{code} > > * If a bean of project B appears in the autowire.xml of project A, but the > package of that bean is not imported in the manifest of project A, a > ClassNotFoundException will be thrown during runtime: > > {code:java} > java.lang.ClassNotFoundException: > com.mycorporation.project-a.commons.notification.IncomingNotificationService > from [Module > "deployment.com.mycorporation.project-b.commons.core:0.0.1.SNAPSHOT" from > Service Module Loader] > {code} > > I suggest to add an option, to exclude dependencies from the list of scanned > classes, like [maven-bundle-plugin's > excludeDependencies|http://felix.apache.org/components/bundle-plugin/bundle-mojo.html#excludeDependencies] > for example, and give this option per default such value as to exclude all > dependencies. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)