bndtools / bnd

Bnd/Bndtools. Tooling to build OSGi bundles including Eclipse, Maven, and Gradle plugins.
https://bndtools.org
Other
528 stars 306 forks source link

Bnd fails on Java 9 class files #1598

Closed bjhargrave closed 8 years ago

bjhargrave commented 8 years ago

It is reported that Bnd does not work on Java 9: https://docs.gradle.org/current/release-notes?_ga=1.40411690.988608058.1455920730#initial-java-9-support. So I went to test build bnd with Java 9.

$ java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+130)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+130, mixed mode)

You will need to remove -XX:MaxPermSize=512m from gradle.properties to run ./gradlew under Java 9.

The build fails with an error in the baseliner:

:aQute.libg:jar
Root cause: null   :java.lang.NullPointerException

        213 JavaElement.classElement                 aQute.bnd.differ 
        310 JavaElement$1.inherit                    ''  (JavaElement.java)
        281 JavaElement$1.extendsClass               aQute.bnd.differ  (JavaElement.java)
        655 Clazz.parseClassFile                     aQute.bnd.osgi 
        496 Clazz.parseClassFile                     '' 
        485 Clazz.parseClassFileWithCollector        aQute.bnd.osgi 
        233 JavaElement.classElement                 aQute.bnd.differ 
        150 JavaElement.<init>                       '' 
        160 JavaElement.getAPI                       aQute.bnd.differ 
        131 DiffPluginImpl.bundleElement             '' 
        114 DiffPluginImpl.tree                      aQute.bnd.differ 
        106 DiffPluginImpl.tree                      '' 
         85 Baseline.baseline                        aQute.bnd.differ 
        168 ProjectBuilder.doBaseline                aQute.bnd.build 
        155 Builder.build                            aQute.bnd.osgi 
       1292 Builder.builds                           '' 
        546 ProjectBuilder.builds                    aQute.bnd.build 
       1734 Project.buildLocal                       '' 
       1544 Project.build                            aQute.bnd.build 
       2051 Project.build                            '' 
:aQute.libg:jar FAILED

(I had to hack the build script to get the above information:

$ git diff -- build.gradle
diff --git a/build.gradle b/build.gradle
index 7435105..cd1be6f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -29,6 +29,7 @@ ext.cnf = rootProject.project(bnd_cnf)
 subprojects {
   def bndProject = bndWorkspace.getProject(name)
   if (bndProject != null) {
+    bndProject.setExceptions(true)
     plugins.apply 'biz.aQute.bnd'
     group bnd('-groupid')
     version bnd('base.version')

)

bjhargrave commented 8 years ago

A more traditional stacktrace:

12:16:07.241 [DEBUG] [aQute.bnd.build.ProjectBuilder] Exception
java.lang.NullPointerException
        at aQute.bnd.differ.JavaElement.classElement(JavaElement.java:213)
        at aQute.bnd.differ.JavaElement$1.inherit(JavaElement.java:310)
        at aQute.bnd.differ.JavaElement$1.extendsClass(JavaElement.java:281)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:655)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:496)
        at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:485)
        at aQute.bnd.differ.JavaElement.classElement(JavaElement.java:233)
        at aQute.bnd.differ.JavaElement.<init>(JavaElement.java:150)
        at aQute.bnd.differ.JavaElement.getAPI(JavaElement.java:160)
        at aQute.bnd.differ.DiffPluginImpl.bundleElement(DiffPluginImpl.java:131)
        at aQute.bnd.differ.DiffPluginImpl.tree(DiffPluginImpl.java:114)
        at aQute.bnd.differ.DiffPluginImpl.tree(DiffPluginImpl.java:106)
        at aQute.bnd.differ.Baseline.baseline(Baseline.java:85)
        at aQute.bnd.build.ProjectBuilder.doBaseline(ProjectBuilder.java:168)
        at aQute.bnd.osgi.Builder.build(Builder.java:155)
        at aQute.bnd.osgi.Builder.builds(Builder.java:1292)
        at aQute.bnd.build.ProjectBuilder.builds(ProjectBuilder.java:546)
        at aQute.bnd.build.Project.buildLocal(Project.java:1734)
        at aQute.bnd.build.Project.build(Project.java:1544)
        at aQute.bnd.build.Project.build(Project.java:2051)
bjhargrave commented 8 years ago

FWIW, the Analyzer seems to parse the class files fine. It is code used by the baseliner which fails.

pkriens commented 8 years ago

This is caused by the fact that we cannot load the resource of Object.class in Java 9 due to protection