Hello,

I’m using github actions to build my AirZone binding and the workflow file is largely inspired by the one in the bindings repository as can be seen here: https://github.com/obones/openhab-binding-airzone/blob/main/.github/workflows/ci-build.yml

This worked just fine 2 months ago, allowing me to build for the following combinations:

  • 3.4.x - Java 11
  • 3.4.x - Java 17
  • 4.0.x - Java 17
  • main - Java 17
  • Now, I have made a few changes to my plugin and the github actions fail for the 3.4.x targets with the following message:

    [INFO] --- karaf:4.3.7:features-generate-descriptor (compile) @ com.obones.binding.airzone ---
    Warning:  Error injecting: org.apache.karaf.tooling.features.GenerateDescriptorMojo
    java.lang.NoClassDefFoundError: org/apache/karaf/features/internal/model/Dependency
        at java.lang.Class.getDeclaredMethods0 (Native Method)
        at java.lang.Class.privateGetDeclaredMethods (Class.java:3166)
        at java.lang.Class.getDeclaredMethods (Class.java:2309)
        at com.google.inject.internal.DeclaredMembers.getDeclaredMethods (DeclaredMembers.java:48)
        at com.google.inject.spi.InjectionPoint.getDeclaredMethods (InjectionPoint.java:811)
        at com.google.inject.spi.InjectionPoint.getInjectionPoints (InjectionPoint.java:730)
        at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields (InjectionPoint.java:430)
        at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies (ConstructorBindingImpl.java:177)
        at com.google.inject.internal.InjectorImpl.getInternalDependencies (InjectorImpl.java:670)
        at com.google.inject.internal.InjectorImpl.cleanup (InjectorImpl.java:627)
        at com.google.inject.internal.InjectorImpl.initializeJitBinding (InjectorImpl.java:613)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding (InjectorImpl.java:943)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive (InjectorImpl.java:863)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding (InjectorImpl.java:300)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow (InjectorImpl.java:223)
        at com.google.inject.internal.InjectorImpl.getProviderOrThrow (InjectorImpl.java:1093)
        at com.google.inject.internal.InjectorImpl.getProvider (InjectorImpl.java:1122)
        at com.google.inject.internal.InjectorImpl.getProvider (InjectorImpl.java:1087)
        at com.google.inject.internal.InjectorImpl.getInstance (InjectorImpl.java:1139)
        at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:86)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
        at com.google.inject.internal.ProviderInternalFactory$1.call (ProviderInternalFactory.java:67)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:109)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:124)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:62)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
        at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1101)
        at org.eclipse.sisu.inject.Guice4$1.get (Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:51)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:263)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:255)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:491)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:114)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
        at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
        at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
        at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:566)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
    Caused by: java.lang.ClassNotFoundException: org.apache.karaf.features.internal.model.Dependency
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass (SelfFirstStrategy.java:50)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass (ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:247)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:239)
        at java.lang.Class.getDeclaredMethods0 (Native Method)
        at java.lang.Class.privateGetDeclaredMethods (Class.java:3166)
        at java.lang.Class.getDeclaredMethods (Class.java:2309)
        at com.google.inject.internal.DeclaredMembers.getDeclaredMethods (DeclaredMembers.java:48)
        at com.google.inject.spi.InjectionPoint.getDeclaredMethods (InjectionPoint.java:811)
        at com.google.inject.spi.InjectionPoint.getInjectionPoints (InjectionPoint.java:730)
        at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields (InjectionPoint.java:430)
        at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies (ConstructorBindingImpl.java:177)
        at com.google.inject.internal.InjectorImpl.getInternalDependencies (InjectorImpl.java:670)
        at com.google.inject.internal.InjectorImpl.cleanup (InjectorImpl.java:627)
        at com.google.inject.internal.InjectorImpl.initializeJitBinding (InjectorImpl.java:613)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding (InjectorImpl.java:943)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive (InjectorImpl.java:863)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding (InjectorImpl.java:300)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow (InjectorImpl.java:223)
        at com.google.inject.internal.InjectorImpl.getProviderOrThrow (InjectorImpl.java:1093)
        at com.google.inject.internal.InjectorImpl.getProvider (InjectorImpl.java:1122)
        at com.google.inject.internal.InjectorImpl.getProvider (InjectorImpl.java:1087)
        at com.google.inject.internal.InjectorImpl.getInstance (InjectorImpl.java:1139)
        at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:86)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
        at com.google.inject.internal.ProviderInternalFactory$1.call (ProviderInternalFactory.java:67)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:109)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:124)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:62)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
        at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1101)
        at org.eclipse.sisu.inject.Guice4$1.get (Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:51)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:263)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:255)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:491)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:114)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
        at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
        at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
        at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:566)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
    

    I have tried looking around but I can’t seem to find any Internet resource explaining why it does not find the org.apache.karaf.features.internal.model.Dependency class.
    I also reviewed my changes since the 0.1.0 tag and could not spot anything obvious that would explain this.

    Does this ring a bell to anyone?

    I think I’ve seen this too when using OpenJDK 11.0.20 with Jenkins in our openHAB 3.4.x patch release pipeline. After switching it back to 11.0.19 it builds fine.

    You can probably also fix it by disabling the “Improved ZIP64 Extra Field Validation” in builds:

    I forced 11.0.19 and it fixed the build.
    But it did not fix the build for Java 17 as I believe it has the same “fix” inside it.
    Do you know how I can set jdk.util.zip.disableZip64ExtraFieldValidation to true from within my github workflow?

    I ran into some more build issues due to this "Improved ZIP64 Extra Field Valida

    It seems there are now also OpenJDK 11.0.20.1 and 17.0.8.1 releases which address some of these “Improved ZIP64 Extra Field Validation” issues:

  • 11.0.20.1 fixes
  • 17.0.8.1 fixes
  •