У меня эта проблема при попытке скомпилировать мой андроид.Это ошибка:
Program type already present: com.fasterxml.jackson.annotation.JacksonAnnotationsInside
Message{kind=ERROR, text=Program type already present: com.fasterxml.jackson.annotation.JacksonAnnotationsInside, sources=[Unknown source file], tool name=Optional.of(D8)}
Проблема возникает из-за того, что я включил 2 независимых модуля, использующих Джексона.Вот моя структура
Independent Module #1 (This uses Jackson)
Independent Module #2 (This uses Jackson) --> Module #3
Module #4 ---> uses both Module #1 and #3
Вот блок в модуле # 1
apply plugin: 'java-library'
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') //all jackson jars are in this directory
}
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
Вот блок в модуле # 2
dependencies {
api files('libs/jackson-annotations-2.8.8.jar')
api files('libs/jackson-core-2.8.8.jar')
api files('libs/jackson-databind-2.8.8.jar')
...
...
...
}
ВотGradle в модуле № 3 (использует модуль № 2 и делает доступным модуль № 2 - включая Джексона)
dependencies {
...
...
...
api project(path: ':module2')
...
...
...
}
Вот блок управления в моем модуле № 4 (который использует модули № 1 и № 3)
dependencies {
...
...
...
implementation project(path: ':module1')
api project(path: ':module3')
...
...
...
}
Теперь это мое приложение
dependencies {
implementation 'com.android.support:leanback-v17:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:3.8.0'
implementation project(path: ':module4')
}
//attempt to fix - but failed.
configurations {
cleanedAnnotations
compile.exclude group: 'com.fasterxml.jackson.annotation' , module:'JacksonAnnotationsInside'
}
ОБНОВЛЕНИЕ
Я временно исправил это, используя compileOnly в модуле № 1.Поэтому вместо implementation fileTree(include: ['*.jar'], dir: 'libs')
я делаю
dependencies {
compileOnly fileTree(include: ['*.jar'], dir: 'libs') //all jackson jars are in this directory
}
Является ли compileOnly рекомендуемым способом?Я думал, что реализация является частной, пока вы не используете API ?