Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-1169

JDK9 with drools: upgrade ECJ to be jdk 9 compatible and remove "java native compiler" mvn profile workaround

XMLWordPrintable

    • NEW
    • NEW

      The code below runs perfectly with OpenJDK 8 (and even 6 and 7).

      To reproduce, use JDK 9 ( https://jdk9.java.net/download/ ) and in optaplanner-core, run XStreamXmlSolverFactoryTest [1] (or mostly any other test that builds a DRL file) to get this error:

      15:56:40.229 [main] ERROR o.d.c.k.b.impl.AbstractKieModule - Unable to build KieBaseModel:defaultKieBase
      Rule Compilation error : [Rule name='Conflict']
      	org/optaplanner/core/api/solver/Rule_Conflict903142795.java (1:0) : The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
      	org/optaplanner/core/api/solver/Rule_Conflict903142795.java (1:0) : The type java.io.Serializable cannot be resolved. It is indirectly referenced from required .class files
      	org/optaplanner/core/api/solver/Rule_Conflict903142795.java (3:337) : Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
      	org/optaplanner/core/api/solver/Rule_Conflict903142795.java (6:569) : java.lang.Exception cannot be resolved to a type
      
      java.lang.IllegalStateException: There are errors in a score DRL:
      Error Messages:
      Message [id=1, level=ERROR, path=org/optaplanner/core/api/solver/testdataScoreRules.drl, line=31, column=0
         text=Rule Compilation error The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
      The type java.io.Serializable cannot be resolved. It is indirectly referenced from required .class files
      Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
      java.lang.Exception cannot be resolved to a type]
      

      That tests builds this DRL:

      package org.optaplanner.core.api.solver;
          dialect "java"
      
      import org.optaplanner.core.api.score.buildin.simple.SimpleScoreHolder;
      
      import org.optaplanner.core.impl.testdata.domain.TestdataValue;
      import org.optaplanner.core.impl.testdata.domain.TestdataEntity;
      
      global SimpleScoreHolder scoreHolder;
      
      // ############################################################################
      // Constraints
      // ############################################################################
      
      rule "Conflict"
          when
              TestdataEntity(value != null, $leftValue : value)
              TestdataEntity(value == $leftValue)
          then
              scoreHolder.addConstraintMatch(kcontext, -1);
      end
      

      Not sure where the Object constructor reference comes from... This might be a JDK 9 upstream issue.

      Note: don't build drools with OpenJDK9 as that will fail sooner

      [1] https://github.com/droolsjbpm/optaplanner/blob/master/optaplanner-core/src/test/java/org/optaplanner/core/impl/solver/XStreamXmlSolverFactoryTest.java

              psiroky_jira Petr Široký (Inactive)
              gdesmet@redhat.com Geoffrey De Smet (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: