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

Having custom `buildSrc` in Gradle project breaks BND plugin #2036

Closed myniva closed 7 years ago

myniva commented 7 years ago

We have a multi-project Gradle setup. The BND plugin is applied like this:

subprojects {
  apply plugin: 'java'

  task bundle(type: Bundle) {
    from sourceSets.main.output
  }

  jar {
    actions = []
    doLast {
      bundle.execute()
  }
}

As soon as we add any class to the Gradle buildSrc, the build breaks with an exception:

:first-project:compileJava UP-TO-DATE
:first-project:processResources UP-TO-DATE
:first-project:classes UP-TO-DATE
:first-project:jar FAILED

Caused by: java.lang.NoSuchMethodError: aQute.bnd.make.Make.<init>(LaQute/bnd/osgi/Builder;)V
        at aQute.bnd.osgi.Builder.<init>(Builder.java:67)
        at aQute.bnd.gradle.BundleTaskConvention$_buildBundle_closure2.doCall(BundleTaskConvention.groovy:106)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70)
        at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:160)
        at org.gradle.util.ConfigureUtil.configureSelf(ConfigureUtil.java:136)
        at org.gradle.api.internal.AbstractTask.configure(AbstractTask.java:528)
        at org.gradle.api.Task$configure$0.call(Unknown Source)
        at aQute.bnd.gradle.BundleTaskConvention.buildBundle(BundleTaskConvention.groovy:104)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:382)
        at org.gradle.internal.metaobject.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:170)
        at org.gradle.api.internal.plugins.DefaultConvention$ExtensionsDynamicObject.invokeMethod(DefaultConvention.java:220)
        at org.gradle.internal.metaobject.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:96)
        at org.gradle.internal.metaobject.MixInClosurePropertiesAsMethodsDynamicObject.invokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:30)
        at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
        at aQute.bnd.gradle.Bundle_Decorated.invokeMethod(Unknown Source)
        at aQute.bnd.gradle.Bundle.copy(Bundle.groovy:53)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:632)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:615)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)

Build environment:

------------------------------------------------------------
Gradle 3.3
------------------------------------------------------------

Build time:   2017-01-03 15:31:04 UTC
Revision:     075893a3d0798c0c1f322899b41ceca82e4e134b

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_112 (Azul Systems, Inc. 25.112-b16)
OS:           Mac OS X 10.12.4 x86_64
bjhargrave commented 7 years ago

I am not sure why you do your build script in such a strange way. It would be more straight forward to just apply the biz.aQute.bnd.builder plugin which modifies the jar task to build the bundle.

Can you please provide a small github repo which demonstrates the problem? Then I can investigate. Thanks.

bjhargrave commented 7 years ago

Are you using some other OSGi plugin in your build? Like https://docs.gradle.org/3.5/userguide/osgi_plugin.html? The exception would indicate Bnd classes from different version of Bnd in the classpath.

myniva commented 7 years ago

Thank you for your quick response!

The hint about Bnd classes from a different version was helpful. The Gradle build src of my project had a transitive dependency to an old version of Bnd. I excluded that dependency which solved the issue.