2017-02-07 4 views
0

У меня есть проект IntelliJ с файлом сборки градиента, который включает в себя несколько проектов из центрального хранилища maven. Одной из таких зависимостей является Geb.Как добавить источники зависимости к IntelliJ

Когда я перемещаюсь по своим классам, я иногда сталкиваюсь с классом Geb, который выглядит интересным. Я выбираю «Перейти к объявлению» и получить грустное «Невозможно найти объявление, чтобы перейти к«.

Очевидно, это связано с тем, что IntelliJ не загрузил исходные файлы Geb. Но как мне заставить это сделать, не включая Geb в качестве источника в моем проекте? Я НЕ хочу, чтобы Geb был скомпилирован в мой проект из источника, потому что я уже включаю его в качестве зависимости в моем файле сборки градации.

  1. Добавление его в качестве зависимости от модуля не работает. Это похоже на добавление дополнительных источников.
  2. Я полагаю, я могу захватить репо и построить банки, а затем включить их. Это действительно необходимо?
  3. Добавление плагина IDEA к файлу градации не работает.

Соответствующая часть Gradle сценария:

apply plugin: 'groovy' 
apply plugin: 'idea' 

dependencies { 
    // need to depend on geb-spock 
    testCompile "org.gebish:geb-spock:0.13.1" 
    testCompile "org.spockframework:spock-core:1.0-groovy-2.4" 
    testCompile "org.apache.commons:commons-lang3:3.4" 
    testCompile "io.github.bonigarcia:webdrivermanager:1.5.0" 
    testRuntime "org.seleniumhq.selenium:selenium-support:2.53.1" 
} 

idea { 
    module { 
     downloadJavadoc = true // defaults to false 
     downloadSources = true 
    } 
} 
+0

«Добавление плагина IDEA к файлу градации не работает». Можете ли вы показать свой файл gradle? – sm4

+0

Я добавил основные части моего файла градиента. – Calicoder

+0

Есть ли mavenLocal среди ваших репозиториев? У меня есть конфигурация с остальной частью скрипта gradle, чтобы он был построен, и мой кегл градиента и intellij оба видят источники. – sm4

ответ

0

Это полный сценарий сборки, который загружает все зависимости с источниками:

apply plugin: 'java' 
apply plugin: 'idea' 

idea { 
    module { 
     downloadJavadoc = true // defaults to false 
     downloadSources = true 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    // need to depend on geb-spock 
    testCompile "org.gebish:geb-spock:0.13.1" 
    testCompile "org.spockframework:spock-core:1.0-groovy-2.4" 
    testCompile "org.apache.commons:commons-lang3:3.4" 
    testCompile "io.github.bonigarcia:webdrivermanager:1.5.0" 
    testRuntime "org.seleniumhq.selenium:selenium-support:2.53.1" 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.3' 
} 

показывает зависимость в списке:

Dependency

И я могу просматривать исходный код, вы можете увидеть комментарии здесь:

The source code


Одним из возможных объяснений может быть, что в вашем хранилище списке репо, такие как mavenLocal или кеширование Artifactory, которое не имеет зависимости от источников.

Порядок размещения репозиториев имеет значение, поэтому, если mavenLocal является первым и источники там недоступны, я считаю, что они не будут загружены. Возможное исправление было бы удалить зависимость от mavenLocal и повторно загрузить его, изменить порядок зависимостей или, если это родительский сценарий, освободить свой подпроект при добавлении репозиториев:

configure(allprojects - project(':my-subproj')) { 
    repositories { 
    ... 
    } 
} 

Я не думаю, что там каким-либо образом вы можете предотвратить это из скрипта сборки подпроекта. Это должно быть сделано в родительском.

+0

Я подозреваю, что родительский файл сборки помещает mavenLocal в список репозитория. Есть ли способ остановить все проекты родителя {репозитории {...}} от применения к моему проекту? – Calicoder

+0

@Calicoder добавила дополнительную информацию к ответу – sm4