RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1273334
Accepted
Evendie
Evendie
Asked:2022-04-22 17:00:31 +0000 UTC2022-04-22 17:00:31 +0000 UTC 2022-04-22 17:00:31 +0000 UTC

Java 如何在我的程序中使用 2 或 3 个版本的 slf4j?

  • 772

我正在通过 Maven 构建一个项目,使用 Windows8 和 NetBeans。我有代码:

           try (InputStream is = new BufferedInputStream(new FileInputStream(newStr))){
                
                String mimeType = tika.detect(is); //определяем mimeType нашего документа
                metadata.set(Metadata.CONTENT_TYPE, mimeType);//устанавливаем mimeType
                
                AutoDetectParser parser = new AutoDetectParser();
                ParseContext pc = new ParseContext(); 
                ContentHandler ch = new BodyContentHandler(-1); 
                parser.parse(is, ch, metadata, pc); //разбор файла на части

           } catch (IOException | SAXException | TikaException ex) {

                System.out.println("Exception of Tika");

           } catch (Throwable th) {
               System.out.println(th.getMessage());
                th.printStackTrace();
                System.out.println("catch");

对一行执行操作时 - parser.parse(is, ch, metadata, pc)。程序无法处理文件并开始进入 catch。以前,她总是因为 Tika 自己抛出的异常而进入第一次捕获,在我添加一些库或更改 pom.xml 中的某些内容后,她没有从 tika 捕获异常,而是进入第二次捕获并捕获另一个异常. 我阅读了 th.printStackTrace() 并看到了这条消息:

org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:131)
    at org.apache.fontbox.ttf.GlyphSubstitutionTable.readLookupTable(GlyphSubstitutionTable.java:263)
    at org.apache.fontbox.ttf.GlyphSubstitutionTable.readLookupList(GlyphSubstitutionTable.java:231)
    at org.apache.fontbox.ttf.GlyphSubstitutionTable.read(GlyphSubstitutionTable.java:80)
    at org.apache.fontbox.ttf.TrueTypeFont.readTable(TrueTypeFont.java:353)
    at org.apache.fontbox.ttf.TTFParser.parseTables(TTFParser.java:173)

...

然后我查看了 mav dependency:tree 并看到 slf4j 的某些版本相互冲突。某些库希望使用比我在 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>StackExp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <tika>1.2</tika>
    </properties>
    
    <dependencies>
        
        <!-- catch-throwable для отлавливания exception-->
        <dependency>
            <groupId>eu.codearte.catch-exception</groupId>
            <artifactId>catch-throwable</artifactId>
            <version>1.4.4</version>
        </dependency>       

        <!-- commons-lang3: для замера времени-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
        
        <!-- jdom: для чтения файла task.xml-->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.0</version>
            <type>jar</type>
        </dependency>
        
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.25</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika</artifactId>
            <version>1.25</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.Tika</groupId>
            <artifactId>Tika-serialization</artifactId>
            <version>1.25</version>
        </dependency> 
        <dependency>     
            <groupId>org.apache.Tika</groupId>
            <artifactId>tika-app</artifactId>
            <version>1.25</version>
        </dependency>  
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers</artifactId>
            <version>1.25</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-app</artifactId>
            <version>2.0.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.22</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>3.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-artifact</artifactId>
            <version>3.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-project</artifactId>
            <version>2.2.1</version>
        </dependency>     
        <dependency>
            <groupId> org.apache.cassandra</groupId>
            <artifactId>cassandra-all</artifactId>
            <version>0.8.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>biz.aQute</groupId>
            <artifactId>bndlib</artifactId>
            <version>1.50.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>jbig2-imageio</artifactId>
            <version>3.0.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.22</version>
        </dependency>
        
        <!-- Test dependencies -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.28</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.28</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.28</version>
        </dependency>
        
        <!-- New1-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.28</version>
        </dependency>
        <!-- New2 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.28</version>
        </dependency>


        
        <dependency>
            <groupId>com.github.jai-imageio</groupId>
            <artifactId>jai-imageio-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.jai-imageio</groupId>
            <artifactId>jai-imageio-jpeg2000</artifactId>
            <version>1.4.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.github.jai-imageio</groupId>
                    <artifactId>jai-imageio-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.34.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>xmpbox</artifactId>
            <version>2.0.22</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-tools</artifactId>
            <version>2.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-debugger</artifactId>
            <version>2.0.22</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>ome</groupId>
            <artifactId>bio-formats</artifactId>
            <version>5.0.0-rc2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>preflight</artifactId>
            <version>2.0.22</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>jempbox</artifactId>
            <version>1.8.16</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>


        <!-- Helper's dependencies -->
        <dependency>
            <groupId>org.gagravarr</groupId>
            <artifactId>vorbis-java-tika</artifactId>
            <version>0.1</version>
        </dependency>
        
        
        <dependency>
            <groupId>com.jolira</groupId>
            <artifactId>onejar-maven-plugin</artifactId>
            <version>1.4.4</version>
        </dependency>
        
        
    </dependencies>

    <build>
        <plugins>
               
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.mycompany.stackexp.Parser</mainClass>
                       
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
                      
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.mycompany.stackexp.Parser</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

例如在 mvn dependency:tree 我可以看到:

[INFO] |  |  |  +- com.intellij:annotations:jar:12.0:compile
[INFO] |  |  |  \- (org.slf4j:slf4j-api:jar:1.7.6:compile - omitted for conflict with 1.7.28)
[INFO] |  |  +- (commons-cli:commons-cli:jar:1.4:compile - omitted for conflict with 1.1)
[INFO] |  +- (org.slf4j:slf4j-log4j12:jar:1.7.28:compile - omitted for conflict with 1.7.25)
[INFO] |  +- (org.gagravarr:vorbis-java-tika:jar:0.8:compile - omitted for conflict with 0.1)
[INFO] |  +- org.tallison:jmatio:jar:1.5:compile
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for conflict with 1.7.28)
[INFO] |  +- com.epam:parso:jar:2.0.12:compile
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.5:compile - omitted for conflict with 1.7.25)
[INFO] |  +- (org.apache.pdfbox:pdfbox:jar:2.0.21:compile - omitted for conflict with 2.0.22)
[INFO] |  +- (org.apache.pdfbox:pdfbox-tools:jar:2.0.21:compile - omitted for conflict with 2.0.19)
[INFO] |  +- (org.apache.pdfbox:preflight:jar:2.0.21:compile - omitted for conflict with 2.0.22)
[INFO] |  +- (org.apache.pdfbox:jempbox:jar:1.8.16:compile - omitted for duplicate)
[INFO] |  +- (org.apache.pdfbox:xmpbox:jar:2.0.21:compile - omitted for conflict with 2.0.22)
[INFO] |  +- org.tallison:isoparser:jar:1.9.41.4:compile
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.30:compile - omitted for conflict with 1.7.25)
[INFO] |  +- com.rometools:rome:jar:1.15.0:compile
[INFO] |  |  +- com.rometools:rome-utils:jar:1.15.0:compile
[INFO] |  |  |  \- (org.slf4j:slf4j-api:jar:1.7.16:compile - omitted for conflict with 1.7.25)
[INFO] |  |  +- (org.jdom:jdom2:jar:2.0.6:compile - omitted for duplicate)
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.16:compile - omitted for conflict with 1.7.25)
[INFO] |  +- com.github.junrar:junrar:jar:7.4.0:compile
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.9:runtime - omitted for conflict with 1.7.25)
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.28:compile - omitted for conflict with 1.7.25)
[INFO] |  |  +- (net.jcip:jcip-annotations:jar:1.0:compile - omitted for duplicate)
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.7:compile - omitted for conflict with 1.7.28)
[INFO] |  +- edu.ucar:grib:jar:4.5.5:compile
[INFO] |  |  +- (edu.ucar:cdm:jar:4.5.5:compile - omitted for duplicate)
[INFO] |  |  +- (org.slf4j:slf4j-api:jar:1.7.7:compile - omitted for conflict with 1.7.28)

这棵树的完整信息可以在文件中看到 - https://dropmefiles.com/SMjrP


那么问题来了,你如何使用这个 slf4j 的 2 或 3 个库,或者你如何给这些链接的库提供他们需要的 slf4j 库的版本?一般来说,这样的版本冲突情况如何解决呢?请让我知道解决此问题的最佳方法是什么。预先感谢您的理解。

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Evendie
    2022-04-23T15:49:16Z2022-04-23T15:49:16Z

    这个问题的一种可能的解决方案:首先,让我们尝试删除重复和不必要的库。例如,在我的 pom.xml 中重复了 tika-app。然后我运行命令:

    mvn dependency:tree -Dverbose -Dincludes=slf4j
    

    我看到了依赖树。它显示了哪些 jars(使用哪个版本)正在使用 slf4j 库。我最需要的图书馆是org.apache.Tika:tika-app (v1.25). 她在里面使用:

    org.slf4j:slf4j-log4j12:jar    
    org.slf4j:jcl-over-slf4j:jar
    org.slf4j:jul-to-slf4j:jar
    

    我将它们带到了 tika-app 想要的一个版本 1.7.28。之后,我开始查看其他想要版本低于 1.7.28 的库。为了消除版本冲突,我在 pom.xml 中为每个此类库添加了以下依赖项:

    例如对于

    [INFO] |  +- org.tallison:jmatio:jar:1.5:compile
    [INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for conflict with 1.7.28)
    

    我在 pom.xml 中添加:

        <dependency>
            <groupId>org.tallison</groupId>
            <artifactId>jmatio</artifactId>
            <version>1.5</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    我为每个想要 slf4j 版本低于我在 pom.xml 中指定的版本的库执行此操作。

    • 0

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5