Jenkins: путь к классу содержит несколько привязок SLF4J
Я пытаюсь запустить интеграционные тесты для плагина JIRA в jenkins. Я получаю следующее предупреждение:
Running xxx
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/prj/xxx/atlassian/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/prj/xxx/atlassian/repository/org/slf4j/slf4j-simple/1.6.4/slf4j-simple-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Есть идеи как это отключить?
Я уже прочитал это: http://www.slf4j.org/codes.html
Но это не очень помогло мне.
Какие именно зависимости или исключения (и где в pom.xml) мне нужно установить, чтобы избавиться от этого предупреждения.
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0</version>
<organization>
<name>xxx</name>
<url>xxx</url>
</organization>
<name>ClearQuestIdTrimmer</name>
<description>This plugin trims the ClearQuestIds.</description>
<packaging>atlassian-plugin</packaging>
<dependencies>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-api</artifactId>
<version>${jira.version}</version>
<scope>provided</scope>
</dependency>
<!-- Add dependency on jira-core if you want access to JIRA implementation classes as well as the sanctioned API. -->
<!-- This is not normally recommended, but may be required eg when migrating a plugin originally developed against JIRA 4.x -->
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-core</artifactId>
<version>${jira.version}</version>
<scope>provided</scope>
</dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- WIRED TEST RUNNER DEPENDENCIES -->
<dependency>
<groupId>com.atlassian.plugins</groupId>
<artifactId>atlassian-plugins-osgi-testrunner</artifactId>
<version>${plugin.testrunner.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2-atlassian-1</version>
</dependency>
<!-- Uncomment to use TestKit in your project. Details at https://bitbucket.org/atlassian/jira-testkit -->
<!-- You can read more about TestKit at https://developer.atlassian.com/display/JIRADEV/Plugin+Tutorial+-+Smarter+integration+testing+with+TestKit -->
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-tests</artifactId>
<version>${jira.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-func-tests</artifactId>
<version>${jira.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-jira-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<productDataPath>${project.basedir}/src/test/resources/generated-test-resources.zip</productDataPath>
<productVersion>${jira.version}</productVersion>
<productDataVersion>${jira.version}</productDataVersion>
<testGroups>
<testGroup>
<id>wired-integration</id>
<productIds>
<productId>jira</productId>
</productIds>
<includes>
<include>it/**/*WiredTest.java</include>
</includes>
</testGroup>
<testGroup>
<id>traditional-integration</id>
<productIds>
<productId>jira</productId>
</productIds>
<includes>
<include>it/**/*TrdTest.java</include>
</includes>
</testGroup>
</testGroups>
<!-- Uncomment to install TestKit backdoor in JIRA. -->
<!--
<pluginArtifacts>
<pluginArtifact>
<groupId>com.atlassian.jira.tests</groupId>
<artifactId>jira-testkit-plugin</artifactId>
<version>${testkit.version}</version>
</pluginArtifact>
</pluginArtifacts>
-->
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<jira.version>6.1-20130626</jira.version>
<amps.version>4.2.3</amps.version>
<plugin.testrunner.version>1.1.1</plugin.testrunner.version>
<!-- TestKit version 5.x for JIRA 5.x, 6.x for JIRA 6.x -->
<testkit.version>6.0.25</testkit.version>
<!-- Set encoding to UTF 8 - needed for Jenkins Integration Test -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- run integration tests in headless mode on CI -->
<xvfb.enable>true</xvfb.enable>
</properties>
2 ответа
Используйте плагин Maven Dependency для отслеживания источника транзитивных зависимостей:
mvn dependency:tree -Dverbose -Dincludes=slf4j-simple
С этим выводом вы сможете добавить необходимые исключения в pom.xml.
Я подозреваю, что у вас нет проблем при локальном запуске maven? Если это так, вы, вероятно, можете игнорировать эту проблему. Если у вас есть такая же проблема локально, тогда игнорируйте то, что следует, и используйте зависимость: дерево:)
Причина в том, что Jenkins связывает несколько привязок slf4j для обхода фатальной проблемы.
Журнал фиксации был
Связка slf4j обязательна для войны. Смотрите комментарий в war/pom.xml для подробного обсуждения. По сути, это ситуация "проклят, если я сделаю, проклят, если я не сделаю", но, учитывая, что JENKINS-12334 является фатальной ошибкой, а недостатком связывания jar привязки является предупреждение "множественная привязка", кажется, что меньше зло состоит в том, чтобы связать это и рискнуть некоторыми предупреждениями.