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>
我还尝试在<profile>
之外添加以下依赖项:
<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 依赖版本的主要内容,如果未能解决你的问题,请参考以下文章