2015-05-28 30 views
3

我想创建一个类似于这种结构的摇篮多项目无效的类路径publish/export dependency/ouat-contract。项目条目不支持

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

我跟着日食例子和定义我ouat服务settings.gradle为

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

在我ouat -servicesImpl集结gradle这个我定义

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

当我尝试运用战争插件在ouat-servicesImpl,I R我的问题开始在Eclipse问题视图eceive以下消息:

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

我ouat服务的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" 
} 

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

回答

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插件: 窗口 - >首选项 - >摇篮 - >参数 - >程序参数 - >使用:'-PmyProjectRefAddedFromIDE'

只是一个警告:这可能适用于您,但是您的设置可能存在其他一些问题,例如简单的多模块项目(不包括另一个多模块项目的模块)不得不使用这种解决方法。

+0

所以你说的这实际上不适用于eclipse项目。解决方案是每次更新eclipse文件时手动添加项目作为依赖关系。对? – ATrubka

11

下面是我发现的一些魔术步骤,可以让它工作而不用手动搞乱项目设置。

  1. 运行命令:gradle这个cleanEclipse蚀

    • 作为此命令的Eclipse的结果忘记了,该项目应该有一个自然的gradle。
  2. 通过执行配置 - >转换为Gradle项目,将gradle自然添加回项目。

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

    • 这最后一步应该得到固定,直到下一次。
+0

这适用于我。为了清楚起见,当我执行多项目gradle导入时,此错误标记始终出现在Web项目中。该错误似乎不会导致任何问题;这只是令人讨厌的看待。 –

+0

另一个有趣的发现是,如果你不运行cleanEclipse并运行eclipse任务,那么G标志从项目中消失,但gradle项目的菜单选项仍然可见,你仍然可以执行gradle相关的活动。 – ATrubka

+5

我只是跑了违规项目的最后一步,它为我工作。不需要重新输入。 – Aaron

2

在我的情况,这是由于混合“刻面”和非面的项目。有错误的项目已被转换为分面形式,并且他们所引用的项目没有被引用。您可以通过添加以下内容到ouat合同gradle这个文件中配置该项目通过使用eclipse-wtp插件来刻面:

eclipse{ 
    wtp{ 
     facet{} 
    } 
} 

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

请注意,此块中,你也可以直接访问小文件进行手动处理XML,如果你需要做其他的事情,比如指定特定的Apache Tomcat运行时或或类似

一旦你做出这种改变,你可以使用Eclipse在你的工作区执行Gradle - > Refresh All ouat-contract - 一旦我这样做了,错误消失了