无效的类路径发布/导出依赖性/ ouat-contract。项目条目不受支持

时间:2015-05-28 14:08:15

标签: gradle gradle-eclipse

我正在尝试创建一个类似于此结构的Gradle multi项目

ouat-services
  - ouat-contract
  - ouat-servicesImpl (web project)

我按照eclipse示例定义了我的ouat-services settings.gradle as

include "ouat-contract", "ouat-servicesImpl"

在我的ouat-servicesImpl build-gradle中我定义了

dependencies {
  compile project(':ouat-contract')
}

当我尝试在ouat-servicesImpl中应用war插件时,我的问题就出现了,我在eclipse问题视图中收到以下消息:

Invalid classpath publish/ export dependency /ouat-contract. Project entries not supported

我的ouat-services build.gradle

configure(subprojects) {

  apply plugin: 'com.github.ben-manes.versions'
  apply plugin: 'eclipse'
  apply plugin: 'java'

  version = '1.0'

  sourceCompatibility = 1.8
  targetCompatibility = 1.8

  def defaultEncoding = 'UTF-8'
  [compileJava, compileTestJava]*.options*.encoding = defaultEncoding

  repositories {

    jcenter()
    mavenLocal()
    mavenCentral()
  }

  jar {
    manifest.attributes provider: 'Company'
  }
}

configure(project(':ouat-servicesImpl')) {

  apply plugin: 'checkstyle'
  apply plugin: 'eclipse-wtp'
  apply plugin: 'findbugs'
  apply plugin: 'jacoco'
  //apply plugin: 'jetty'
  apply plugin: 'pmd'
  apply plugin: 'war'
}

buildscript {

  repositories {

    jcenter()
    mavenCentral()
    mavenLocal()
  }

  dependencies {
    classpath 'com.github.ben-manes:gradle-versions-plugin:0.10.1'
  }
}

我的ouat-servicesImpl构建gradle已更改为:

dependencies {

  compile project(':ouat-contract')

  cxfArtifacts.each { artifact ->
    compile "org.apache.cxf:$artifact:$cxfVersion"
  }

  springArtifacts.each { artifact ->
    compile "org.springframework:$artifact:$springVersion"
  }

  testCompile "org.testng:testng:$testNGVersion"
  testCompile "org.hamcrest:hamcrest-all:$hamcrestVersion"
  testCompile "org.springframework:spring-test:$springVersion"

  //WAR PLUGIN
  providedCompile "javax.servlet:javax.servlet-api:$servletAPIVersion"
  runtime "javax.servlet:jstl:$jstlVersion"
}

这是一个日食插件问题还是我做错了什么?

4 个答案:

答案 0 :(得分:11)

这是我发现的神奇步骤,使其无需手动处理项目设置即可使用。

  1. 运行命令:gradle cleanEclipse eclipse

    • 作为此命令的结果,Eclipse忘记了该项目应具有gradle性质。
  2. 通过配置 - >将gradle nature添加回项目转换为Gradle项目。

    • 作为此命令的结果,错误重新出现。
    • 如果出现不兼容的插件java版本错误,则只需删除.settings目录并刷新。
  3. 运行命令:gradle cleanEclipseClasspath eclipseClasspath

    • 这个最后一步应该一直修好到下一次。

答案 1 :(得分:6)

就我而言,这是因为混合了“刻面”和非刻面项目。带有错误的项目已经转换为多面形式,他们引用的项目也没有被引用。您可以通过使用eclipse{ wtp{ facet{} } } 插件将项目配置为分面,方法是将其添加到您的ouat-contract gradle文件中:

typedef struct node List;
struct node
{
Book elements[LEN];
int num_books;
List * next;
};

这将在使用java和war插件时为Java和实用程序模块添加构面(有关默认值的更多信息,请参阅EclipseWTPFacet文档,如果不使用war插件,请手动添加构面。 )。实用模块部分是避免错误的关键。

请注意,如果您需要执行其他操作,例如指定特定的Apache Tomcat Runtime或类似的

,您还可以在此块中直接访问facet文件以执行手动XML操作。

进行此更改后,您可以使用Eclipse进行Gradle - >刷新所有工作区内的合同 - 一旦我这样做,错误就消失了

答案 2 :(得分:0)

我很久以前也遇到过这个问题。它似乎与“Gradle IDE Pack”中包含的Eclipse插件相关的问题(因为它在命令行中没有问题)。 我的设置可能比你的设置更复杂(我将模块从一个顶级gradle项目包含到另一个顶级gradle项目中),但要克服这个特定的错误

Invalid classpath publish/ export dependency /my-project. Project entries not supported

...如果缺少某些特定的gradle属性,我排除了项目依赖性:

if(project.hasProperty("myProjectRefAddedFromIDE")) {
    println "NB! Build script started with property 'myProjectRefAddedFromIDE' - expecting that this project in IDE is configured to add the direct reference to my-project"
} else {
    compile project(':my-project')
}

要仅从IDE添加属性“myProjectRefAddedFromIDE”,我已按如下方式配置了eclipse插件: 窗口 - >偏好 - > Gradle - >参数 - >程序参数 - >使用:' - PmyProjectRefAddedFromIDE'

只是一个警告:这可能对你有用,但是你的设置可能还有一些问题,就像简单的多模块项目(不包括另一个多模块项目的模块)我不这样做必须使用此解决方法。

答案 3 :(得分:0)

这对我有用,可以从JRE系统库中删除重复的jar文件。 步骤右键单击Project,然后转到Build Path-> configure build path-> Libraries。 删除不在类路径中或在Maven依赖项中重复的jar。