2015-05-28 1 views
3

Я пытаюсь создать многофункциональный проект Gradle аналогичного эту структуруНедопустимая публикация/экспорт зависимости/уайт-контракта. Записи проекта не поддерживаются

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 г 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 plug-in или я что-то делаю неправильно?

ответ

0

Я также сталкивался с этой проблемой давным-давно. Кажется, что проблема связана с плагином Eclipse, включенным в «Gradle IDE Pack» (поскольку он работает из командной строки без проблем). Моя установка, вероятно, путь более сложная, чем Ваш (я в то числе модулей из 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 -> Аргументы -> Параметры программы -> Использование: '-PmyProjectRefAddedFromIDE'

Просто предупреждение: это, вероятно, сработает для вас, но может быть и другая проблема с вашей настройкой, как и для простого многомодульного проекта (который не включает модули из другого многомодульного проекта) t использовать это обходное решение.

+0

Так что вы говорите, что на самом деле это не будет работать для проектов eclipse. Решение заключалось бы в том, чтобы вручную добавлять проекты как зависимости каждый раз, когда файлы eclipse обновлялись. Правильно? – ATrubka

11

Вот волшебные шаги, которые я обнаружил, чтобы заставить его работать, не путаясь с настройками проекта вручную.

  1. Выполнить команду: Gradle cleanEclipse затмение

    • в результате этой команды Eclipse, забывает о том, что проект должен был иметь Gradle характер.
  2. Добавить природу градитуры обратно в проект, выполнив Configure -> Convert to Gradle Project.

    • В результате этой команды появляется ошибка.
    • Если появляется несовместимая версия Java версии плагина, просто удалите каталог .settings и обновите.
  3. команда Run: Gradle cleanEclipseClasspath eclipseClasspath

    • этот последний шаг не должен ее исправить до следующего раза.
+0

Это работает для меня. Чтобы быть ясным, этот маркер ошибки всегда появляется в веб-проекте, когда я выполняю импорт нескольких проектов. Ошибка не вызывает никаких проблем; это просто раздражает. –

+0

Еще одна интересная находка заключается в том, что если вы не запустите cleanEclipse и просто запустите задачу eclipse, то знак G исчезнет из проекта, но параметры меню для проектов градиентов остаются видимыми, и вы все равно можете выполнять действия, связанные с градиентом. – ATrubka

+5

Я просто пропустил последний шаг против оскорбительного проекта, и это сработало для меня. Реимпорт не требуется. – Aaron

2

В моем случае, это было связано со смешиванием «ограненные» и не-ограненных проектов. Проекты с ошибкой были преобразованы в фасетную форму, и проект, на который они ссылались, о котором он жаловался, не был. Вы можете настроить проект, который будет гранеными с помощью использования eclipse-wtp плагина, добавив это к вашему OUAT-контракт Gradle файлу:

eclipse{ 
    wtp{ 
     facet{} 
    } 
} 

Это добавит аспекты для Java и утилиты модуля при использовании Java и военных плагин (см. документацию EclipseWTPFacet для получения дополнительной информации о значениях по умолчанию и добавлении граней вручную, если вы не используете военный плагин). Часть служебного модуля является ключом, чтобы избежать ошибки.

Обратите внимание, что в этом блоке вы можете также получить доступ к файлу фасеты непосредственно выполнять вручную манипуляции XML, если вам нужно сделать другие вещи, например, указать конкретный Apache Tomcat во время выполнения или или аналогичного

После того, как вы сделаете это изменение, вы можете использовать Eclipse, чтобы делать Gradle -> Refresh All on ouat-contract в вашем рабочем пространстве - как только я это сделал, ошибка исчезла

Смежные вопросы