java - 找不到 Apache Commons/lang/StringUtils

标签 java maven jboss

众所周知,JBoss AS 7.0.0 提供了一些开箱即用的 apache-commons 依赖项。它们位于

$JBOSS_HOME$\modules\org\apache\commons\lang\main

因此,我尝试通过在我的 pom.xml 中声明以下依赖项来使用这些提供的依赖项:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>${commons.version}</version>
    <scope>provided</scope>
</dependency>

当我尝试使用它的类时,我得到了:

java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    com.badmitrii.EmployeeListController.getEmployees(EmployeeListController.java:39)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

当然,如果我用 compile 替换 scope 标签,它就会正常工作。但是使用嵌入到服务器中的库有什么问题呢?也许需要额外的配置?

最佳答案

尝试在 META-INF/MANIFEST.MF 文件的“依赖项”部分中添加 org.apache.commons.lang。

我认为问题在于您没有声明依赖项,因此 JBoss 没有为您加载该类..

希望对你有帮助!

编辑:您可以使用 maven-war-plugin 或 maven-ear-plugin 通过 maven 进行设置。这是一个例子:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>

        <!-- Maven will append the version to the finalName (which is the name 
            given to the generated war, and hence the context root) -->
        <warName>${project.artifactId}</warName>

        <archive>
            <manifestEntries>
                <Dependencies>org.apache.commons.lang</Dependencies>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

关于java - 找不到 Apache Commons/lang/StringUtils,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839841/

相关文章:

java - 子项目pom中的父pom版本

deployment - JBoss 远程部署

java - 确认文本框已禁用

尝试启动 Windows 服务时出现 java.lang.ClassNotFoundException : org. Zeromq.ZContext

java - 尝试在tomcat 9中加载maven项目,显示启动时子容器失败

java - 在 Java WAR 文件中部署 Angular 6

java - Picketlink 2.6+ Jboss AS 7.1.1

Java SWT 更新文本控件

java - 打开应用程序前的锁屏服务

java - 这是检查用户对数据层的访问权限的良好设计吗?