TYCHO maven 构建包括两个不同的 org.slf4j.api 版本
TYCHO maven build is including two differents org.slf4j.api versions
我正在使用 org.slf4j 和 ch.qos.logback 来记录我的 osgi 应用程序,该应用程序是在 eclipse equinox 环境下设计和执行的。
一切正常。
SLF4J插件在一个特性文件中声明一次,如下:
<plugin
id="org.slf4j.api"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
当我在 eclipse 调试器下 运行 应用程序时,或者当我在 eclipse 产品导出功能下导出应用程序时,我的日志会根据 logback.xml 正确处理。
当我查看 myapp/plugin 文件夹时,我找到了这两个罐子:
- 组织slf4j.api_1.7.2.v20121108-1250.jar
- org.slf4j.log4j_1.7.2.v20130115-1340.jar
但是,当我使用 TYCHO 和 MAVEN 构建应用程序时,我在 myapp/plugins/ 文件夹中发现了 2 个不同版本的 org.slf4j.api :
- org.slf4j.api_1.7.2.v20121108-1250.jar
- org.slf4j.api_1.7.10.v20160921-1923.jar
- org.slf4j.log4j_1.7.2.v20130115-1340.jar
因此,当我执行应用程序时,显示以下消息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
osgi> log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.
看起来 org.slf4j.api_1.7.10 jar 包含在构建中并破坏了日志记录机制。
这破坏了我的自动构建。
请帮忙。
谢谢。
编辑
我没有使用目标文件。
在主 pom 文件中,我设置了 2 个存储库:
<repositories>
<repository>
<id>eclipse</id>
<url>http://download.eclipse.org/releases/neon</url>
<layout>p2</layout>
</repository>
<repository>
<id>orbit</id>
<url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository/</url>
<layout>p2</layout>
</repository>
根本问题是您的产品(我假设它是基于功能的产品)包含一个引入 org.slf4j.api
版本 1.7.2 的功能和另一个引入 1.7.10 的功能。 (好吧,理论上相同的功能可以同时引入两个版本,但这种情况很少见。)
如果您在 Tycho 构建中使用 .target
定义文件,我很好地确定了 org.slf4j.api
的两个版本如何最终出现在您的目标平台中,即在 Target Editor,切换到 Content 选项卡,然后选择 Group by Location。这会告诉您 org.slf4j.api
1.7.10 来自哪个更新站点(但不是确切的功能)。如果您已将范围缩小到一个功能,您可以尝试搜索不包含有问题的 org.slf4j.api
包的替代品。
我终于找到了问题所在:
p2 存储库不兼容。
我已经同步了网址,现在可以了。
<repositories>
<repository>
<id>eclipse</id>
<url>http://download.eclipse.org/releases/neon</url>
<layout>p2</layout>
</repository>
<repository>
<id>orbit</id>
<url>http://download.eclipse.org/tools/orbit/R-builds/R20170307180635/repository/</url>
<layout>p2</layout>
</repository>
</repositories>
@Andreas:谢谢你的帮助。
我正在使用 org.slf4j 和 ch.qos.logback 来记录我的 osgi 应用程序,该应用程序是在 eclipse equinox 环境下设计和执行的。 一切正常。 SLF4J插件在一个特性文件中声明一次,如下:
<plugin
id="org.slf4j.api"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
当我在 eclipse 调试器下 运行 应用程序时,或者当我在 eclipse 产品导出功能下导出应用程序时,我的日志会根据 logback.xml 正确处理。
当我查看 myapp/plugin 文件夹时,我找到了这两个罐子: - 组织slf4j.api_1.7.2.v20121108-1250.jar - org.slf4j.log4j_1.7.2.v20130115-1340.jar
但是,当我使用 TYCHO 和 MAVEN 构建应用程序时,我在 myapp/plugins/ 文件夹中发现了 2 个不同版本的 org.slf4j.api :
- org.slf4j.api_1.7.2.v20121108-1250.jar
- org.slf4j.api_1.7.10.v20160921-1923.jar
- org.slf4j.log4j_1.7.2.v20130115-1340.jar
因此,当我执行应用程序时,显示以下消息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
osgi> log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.
看起来 org.slf4j.api_1.7.10 jar 包含在构建中并破坏了日志记录机制。
这破坏了我的自动构建。
请帮忙。
谢谢。
编辑 我没有使用目标文件。 在主 pom 文件中,我设置了 2 个存储库:
<repositories>
<repository>
<id>eclipse</id>
<url>http://download.eclipse.org/releases/neon</url>
<layout>p2</layout>
</repository>
<repository>
<id>orbit</id>
<url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository/</url>
<layout>p2</layout>
</repository>
根本问题是您的产品(我假设它是基于功能的产品)包含一个引入 org.slf4j.api
版本 1.7.2 的功能和另一个引入 1.7.10 的功能。 (好吧,理论上相同的功能可以同时引入两个版本,但这种情况很少见。)
如果您在 Tycho 构建中使用 .target
定义文件,我很好地确定了 org.slf4j.api
的两个版本如何最终出现在您的目标平台中,即在 Target Editor,切换到 Content 选项卡,然后选择 Group by Location。这会告诉您 org.slf4j.api
1.7.10 来自哪个更新站点(但不是确切的功能)。如果您已将范围缩小到一个功能,您可以尝试搜索不包含有问题的 org.slf4j.api
包的替代品。
我终于找到了问题所在:
p2 存储库不兼容。 我已经同步了网址,现在可以了。
<repositories>
<repository>
<id>eclipse</id>
<url>http://download.eclipse.org/releases/neon</url>
<layout>p2</layout>
</repository>
<repository>
<id>orbit</id>
<url>http://download.eclipse.org/tools/orbit/R-builds/R20170307180635/repository/</url>
<layout>p2</layout>
</repository>
</repositories>
@Andreas:谢谢你的帮助。