2013-04-16 4 views
2

У меня есть многопроектная сборка Gradle. У меня Sub-Project-A, что зависит от Sub-Project-B. Sub-Project-B имеет зависимость от времени компиляции от SLF4J. Я делаю не хочу Sub-Project-A, чтобы иметь возможность компилировать любые библиотеки SLF4J, но во время выполнения я хочу, чтобы код Sub-Project-B был в состоянии работать.Использование Gradle Предотвращение использования сторонней библиотеки от компиляции Classpath

То, что я думал, что я мог сделать, это добавить зависимостей времени компиляции в подпроект-B, а затем добавить:

configurations { 
    compile.exclude group: 'org.slf4j' 
} 

к подпроект-A. Это предотвращает компрометацию любого кода с помощью API slf4j, но также предотвращает доступ библиотеки slf4j к исполняемому файлу Sub-Project-A, поэтому, как только будет получен код от Sub-Project-B, я получаю исключение ClassNotFoundException.

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

ответ

4

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

Как небольшая модификацию erdi's solution, можно повторно включить все зависимости Б в конфигурации во время выполнения элементов а:

dependencies { 
    compile(project(':A')) { 
     exclude group: 'org.slf4j' 
    } 
    runtime project(':A') 
} 

Это немного меньше повторов.

+0

Да, это действительно кажется менее повторяющимся – erdi

+0

Это работает очень хорошо, за исключением того, что я обнаружил, что множество других настроек, которые я настроил, также в конечном итоге вытягивает slf4j, поэтому это решение не работает в любом случае. Отмечая это как правильное решение, так как в моем ограниченном случае я изложил это мнение, это, безусловно, лучший способ справиться с этим. Благодаря! – jjathman

3

Вы, вероятно, следует исключить зависимость SLF4J при определении зависимости от Sub-Project-B, а затем добавить SLF4J зависимость во время выполнения программы конфигурации:

dependencies { 
    compile(project(':Sub-Project-B')) { 
     exclude group: 'org.slf4j' 
    } 
    runtime 'org.slf4j:...:...' 
} 
Смежные вопросы