无效的类路径发布/导出依赖/外包合同.不支持项目条目



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

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

我按照eclipse示例定义了我的out -services设置。gradle

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

在我的out - servicesimpl build-gradle中定义了

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

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

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

My out -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'
  }
}

我的out - 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"
}

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

以下是我发现的神奇步骤,可以让它在不手动打乱项目设置的情况下工作。

  1. 运行gradle cleanEclipse命令

      由于这个命令,Eclipse忘记了这个项目应该是gradle性质的。
  2. 通过Configure -> Convert to gradle project将gradle属性添加回项目。

    • 由于这个命令,错误再次出现。
    • 如果出现不兼容的插件java版本错误,请删除。settings目录并刷新。
  3. 运行gradle cleanEclipseClasspath eclipseClasspath

    • 这最后一步应该得到修复,直到下一次。

在我的例子中,这是由于混合了"分面"和非分面项目。有错误的项目已经转换为面形,他们所引用的项目,它抱怨没有。你可以通过使用eclipse-wtp插件来配置项目是分面的,把它添加到你的外包gradle文件中:

eclipse{
    wtp{
        facet{}
    }
}

这将在使用Java和war插件时为Java添加facet和实用工具模块(请参阅EclipseWTPFacet文档,了解有关默认值和手动添加facet的更多信息,如果您不使用war插件)。实用模块部分是避免这种误差的关键。

注意,如果你需要做其他事情,如指定一个特定的Apache Tomcat运行时或类似的

,你也可以直接访问facet文件来执行手动XML操作。

一旦你做了这个改变,你就可以用Eclipse在你的工作空间里做Gradle -> Refresh All - on -contract -一旦我这样做了,错误就消失了

我很久以前也遇到过这个问题。这似乎真的是与"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')
}

和添加属性"myProjectRefAddedFromIDE"只从IDE,我已经配置eclipse插件如下:Window -> Preferences -> Gradle -> Arguments -> Program Arguments -> Use: ' - pmyprojectrefaddedfromide '

只是一个警告:这可能会为您工作,但可能有一些其他的问题与您的设置,作为简单的多模块项目(不包括模块形成另一个多模块项目),我不需要使用这个解决方案。

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

相关内容

  • 没有找到相关文章

最新更新