Gradle插件依赖项(NoClassDefFoundError)

时间:2016-12-14 08:33:55

标签: gradle groovy gradle-plugin

我正在尝试编写gradle插件,它依赖于RPM星云插件(它基本上包装它)。我编译插件没有任何问题。在生成的ivy.xml中我有

  <dependencies>
      <dependency org="com.netflix.nebula" name="gradle-ospackage-plugin" rev="4.1.0" conf="compile-&gt;default"/>
  </dependencies>

感觉还可以,但是当我在应用程序中应用我的插件时,我得到了

Caused by: java.lang.NoClassDefFoundError: com/netflix/gradle/plugins/rpm/RpmPlugin
    at com.cisco.td.gradle.rpm.ServiceRpmPlugin$_configureProject_closure2.doCall(ServiceRpmPlugin.groovy:27)
    at com.cisco.td.gradle.rpm.ServiceRpmPlugin.configureProject(ServiceRpmPlugin.groovy:26)

执行此部分代码时

    project.plugins.with {
        apply RpmPlugin
    }

我尝试使用

从我的插件类添加构建类路径的依赖项
    project.buildscript.dependencies {
        classpath "com.netflix.nebula:gradle-ospackage-plugin:4.1.0"
    }

但是这引发了:

Caused by: org.gradle.api.InvalidUserDataException: Cannot change dependencies of configuration ':classpath' after it has been resolved.
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.validateMutation(DefaultConfiguration.java:631)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$2.run(DefaultConfiguration.java:174)
    at org.gradle.api.internal.DefaultDomainObjectCollection.assertMutable(DefaultDomainObjectCollection.java:274)

当我将星云依赖项直接添加到应用程序项目作为buildscript依赖项时,它是有效的,但这不是我认为应该如何工作 - 插件应该下载所有依赖项,客户端不应该关心... < / p>

提前致谢!

1 个答案:

答案 0 :(得分:0)

几个小时后 - 问题是,没有生成pom.xml。使用

创建时
uploadArchives {
  repositories {
      mavenDeployer {
        repository(url: mavenLocal().url)
      }
  }
}

它按预期工作......