Maven 依赖版本

Posted

技术标签:

【中文标题】Maven 依赖版本【英文标题】:Maven dependecy versions 【发布时间】:2020-07-26 22:26:20 【问题描述】:

我正在开发一个旧的 Struts 1 应用程序。我添加了 Quartz,因为我需要使用 this tutorial 来安排要运行的作业。

我现在确实遇到了运行时错误,它抱怨我正在使用的slf4j 的版本。

10:15:07,813 错误 [stderr] (MSC 服务线程 1-13) SLF4J: slf4j-api 1.6.x(或更高版本)与此绑定不兼容。 10:15:07,814 错误 [stderr](MSC 服务线程 1-13)SLF4J:您的绑定是版本 1.5.5 或更早版本。 10:15:07,814 错误 [stderr](MSC 服务线程 1-13)SLF4J:将您的绑定升级到版本 1.6.x。 10:15:07,814 SEVERE [org.apache.struts.action.ActionServlet](MSC 服务线程 1-13) 由于意外,无法初始化 Struts ActionServlet 抛出异常或错误,因此将 servlet 标记为不可用。 这很可能是由于库不正确或缺失 依赖项:java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 在 org.slf4j.LoggerFactory.bind(LoggerFactory.java:129) [slf4j-api-1.7.7.jar:] 在 org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) [slf4j-api-1.7.7.jar:] 在 org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302) [slf4j-api-1.7.7.jar:] 在 org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276) [slf4j-api-1.7.7.jar:] 在 org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288) [slf4j-api-1.7.7.jar:] 在 org.quartz.impl.triggers.CronTriggerImpl.(CronTriggerImpl.java:67) [quartz-2.3.2.jar:] 在 org.quartz.CronScheduleBuilder.build(CronScheduleBuilder.java:84) [quartz-2.3.2.jar:] 在 org.quartz.TriggerBuilder.build(TriggerBuilder.java:101) [quartz-2.3.2.jar:] 在 com.travellinck.plugin.QuartzPlugin.init(QuartzPlugin.java:33) [课程:] 在 org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:884) [struts-core-1.4.1-ee6.jar:] 在 org.apache.struts.action.ActionServlet.init(ActionServlet.java:352) [struts-core-1.4.1-ee6.jar:] 在 javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3631) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:3844) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 在 org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [:1.7.0_80] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [:1.7.0_80] 在 java.lang.Thread.run(Thread.java:745) [:1.7.0_80]

我的 pom 文件已经有了这个使用 slf4j-log4j12 版本 1.5.8 的配置文件:

    <profile>
        <id>jspCompile</id>
        <activation>
            <!-- TODO: Re-activate default JSP compilation when dependency issue is sorted out. The following happens:
            [ERROR] Unable to read TLD "META-INF/c.tld" from JAR file
            "file:/Users/dawidl/.m2/repository/javax/javaee-api/6.0/javaee-api-6.0.jar":
            org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator
            class: org.apache.taglibs.standard.tlv.JstlCoreTLV -> [Help 1] -->
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo.jspc</groupId>
                    <artifactId>jspc-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                            <phase>compile</phase>
                        </execution>
                    </executions>
                    <configuration>
                        <includeInProject>false</includeInProject>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                    <!-- Use the Tomcat 6 JSP compiler -->
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo.jspc</groupId>
                            <artifactId>jspc-compiler-tomcat6</artifactId>
                            <version>2.0-alpha-3</version>
                        </dependency>
                        <dependency>
                            <groupId>org.slf4j</groupId>
                            <artifactId>slf4j-log4j12</artifactId>
                            <version>1.5.8</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>

我在我的 pom 文件中添加了以下依赖项:

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>1.7.2</version>
    </dependency>

我已尝试将插件依赖项更改为1.7.7

                        <dependency>
                            <groupId>org.slf4j</groupId>
                            <artifactId>slf4j-log4j12</artifactId>
                            <version>1.7.7</version>
                        </dependency>
                    </dependencies>
                </plugin>

我还尝试在&lt;profile&gt; 之外添加以下依赖项:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.7</version>
    <scope>test</scope>
</dependency>

但我仍然收到上述错误。

问题

如何配置我的依赖项以便让 Quartz 工作?

谢谢

【问题讨论】:

【参考方案1】:

尝试最新的slf4j-log4j 版本并确保只有slf4j-log4j 的版本

【讨论】:

感谢您的回答,您是这个意思吗? mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.7.30

以上是关于Maven 依赖版本的主要内容,如果未能解决你的问题,请参考以下文章

Maven 依赖项 - 版本与更新

Maven依赖版本依赖JVM版本

依赖管理中的依赖与 Maven 版本插件中的依赖

Maven 版本依赖

Maven 依赖版本不匹配问题 - 从 repo 解决过时的依赖版本

maven-传递依赖和依赖冲突版本解决