Тип программы уже представлен: com.fasterxml.jackson.annotation.JacksonAnnotationsInside - PullRequest
0 голосов
/ 08 февраля 2019

У меня эта проблема при попытке скомпилировать мой андроид.Это ошибка:

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 ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...