java - 包含共享 jar 的 Maven 可以编译但不能实时运行

标签 java maven jar shared-libraries war

我有 2 个项目:

ProjectA 和 SharedProject。

我在 ProjectA 中使用以下 POM 文件:

    <dependency>
        <groupId>MyGroup</groupId>
        <artifactId>shared</artifactId>
        <version>SNAPSHOT-1.0.0</version>           
        <scope>compile</scope>          
    </dependency>
<dependency>

共享项目的 pom 如下所示:

<modelVersion>4.0.0</modelVersion>
<groupId>MyGroup</groupId>
<artifactId>shared</artifactId>
<version>SNAPSHOT-1.0.0</version>
<name>shared</name>
<packaging>jar</packaging>

我的 ProjectA 进行了编译(并且实际上确实使用了来自 SharedProject 的导入),所以我得到了它。

运行后出现问题:ProjectA -> mvn install 并在tomcat上运行 我收到以下错误:

SEVERE: Exception starting filter cors
java.lang.ClassNotFoundException:   com.mygroup.shared.filter.common.CorsFilter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

这个未找到的类位于 SharedProject 中,并在 ProjectA web.xml 文件中引用。下面是ProjectA的web.xml具体引用代码:

    <filter>
    <filter-name>cors</filter-name>
    <filter-class>com.mygroup.shared.filter.common.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>cors</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

最佳答案

从依赖声明中删除范围标签,一切都会好起来的。

范围compile告诉maven,这个依赖项只会在编译时使用。例如,它用在MapStruct中,在编译阶段生成代码,之后就不需要依赖项了。

关于java - 包含共享 jar 的 Maven 可以编译但不能实时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793498/

相关文章:

java - 如何更改 Jbutton 的大小而不更改其所在的 Jpanel 的大小?

java - 项目 'X' 缺少必需的 Java 项目 : 'Y'

java - 允许用户在线运行我的JAR预订程序

java - Java中的线程池有什么用?

java - 显示线程的 top 命令——这是某种延迟吗?

java - libgdx 布娃娃物理与动画

java - 无法使用 testng 和 maven 生成 allure 报告

java - 使用 Maven 是否可以将 "add to"指定为父 pom 中的属性或插件值?

java - Intellij 模块在重建时被遗忘

java - 访问与主代码不同的 JAR 文件中的资源