2014-10-20 5 views
1

В Gradle сценария сборки Я следующий фрагмент кода:Разница между выполнением и компиляцией группой

dependencies { 
    runtime group: 'org.springframework', name: 'spring-core', version: '4.1.1' 
} 

и она отлично работает, но если я изменить его на

dependencies { 
    compile group: 'org.springframework', name: 'spring-core', version: '4.1.1' 
} 

исключение, будут выброшены во время gradle build

Could not resolve all dependencies for configuration ':compile'. 
> Could not find org.springframework:spring-core:4.1.1. 
    Searched in the following locations: 
     https://repo1.maven.org/maven2/org/springframework/spring-core/4.1.1/sprin 
g-core-4.1.1.pom 
     https://repo1.maven.org/maven2/org/springframework/spring-core/4.1.1/sprin 
g-core-4.1.1.jar 

Я думал, что артефакт на поиск в том же месте для обоих компе ile и время выполнения. Каковы различия между ними?

ответ

3

Gradle разрешает compile зависимости перед выполнением компиляции, ожидая, что исходный код будет напрямую ссылаться на артефакт. Однако он не разрешает зависимостей runtime до тех пор, пока в процессе сборки не будет. (См @ ответ Донал «s для руководства по использованию в выборе между compile и runtime)

Таким образом, наиболее вероятно, что разница между этими двумя случаями является то, что ваша build задача требует компиляции, но не во время выполнения преп. С вашей исходной конфигурацией любая задача, требующая подготовки к запуску, сбойной ошибкой будет иметь ту же ошибку.

Для исправления ошибки в этом конкретном случае, я рекомендую изменить свое version значение из 4.1.1 (который не находится в хранилище Maven вы в качестве ссылки) на 4.1.1.RELEASE (что).

+0

Да, это работает. Спасибо –

+0

Хммм. Похоже, @ Dónal снял свой ответ. IIRC только его руководство было ... Если ваш код содержит оператор импорта, который ссылается на класс, найденный в зависимости, тогда вы должны использовать 'compile'. В противном случае вы должны использовать 'runtime'. – BalRog

+2

Хорошим примером этого будет наличие библиотеки Java в качестве зависимости от компиляции и ее реализации в качестве зависимости от времени выполнения. 'compile 'javax.ws.rs: javax.ws.rs-api: 2.0.1'' и' runtime' org.glassfish.jersey.core: jersey-client: 2.22.1'' для клиента REST в качестве примера , – Powerlord

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