Java 包含共享jar的Maven可以编译,但不能实时工作
我有两个项目: ProjectA和SharedProject 我在ProjectA中使用以下POM文件:Java 包含共享jar的Maven可以编译,但不能实时工作,java,maven,jar,shared-libraries,war,Java,Maven,Jar,Shared Libraries,War,我有两个项目: ProjectA和SharedProject 我在ProjectA中使用以下POM文件: <dependency> <groupId>MyGroup</groupId> <artifactId>shared</artifactId> <version>SNAPSHOT-1.0.0</version> &l
<dependency>
<groupId>MyGroup</groupId>
<artifactId>shared</artifactId>
<version>SNAPSHOT-1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
MyGroup
共享
快照-1.0.0
编撰
共享项目的pom如下所示:
<modelVersion>4.0.0</modelVersion>
<groupId>MyGroup</groupId>
<artifactId>shared</artifactId>
<version>SNAPSHOT-1.0.0</version>
<name>shared</name>
<packaging>jar</packaging>
4.0.0
MyGroup
共享
快照-1.0.0
共享
罐子
我的ProjectA进行编译(实际上使用的是从SharedProject导入的内容),所以我就这样做了
运行后出现问题:ProjectA->mvn安装
在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)
严重:启动过滤器cors时出现异常
java.lang.ClassNotFoundException:com.mygroup.shared.filter.common.CorsFilter
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
位于org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
位于org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
位于org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
位于org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:107)
位于org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(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>
科尔斯
com.mygroup.shared.filter.common.CorsFilter
科尔斯
/*
从依赖项声明中删除范围标记,一切都会好起来的
范围
compile
对maven说,这种依赖关系只会在编译时使用。例如,它在MapStruct中使用,MapStruct在编译阶段生成代码,之后就不需要依赖项 从依赖项声明中删除scope标记,一切都会好起来的
范围
compile
对maven说,这种依赖关系只会在编译时使用。例如,它在MapStruct中使用,MapStruct在编译阶段生成代码,之后就不需要依赖项 按照惯例,使用类似于1.0.0-SNAPSHOT
的版本,因为从Mavens的角度来看,版本SNAPSHOT-1.0.0
是一个发行版!第二次将永远不会检查它…因此,第一次执行mvn安装时,
jar将存储到本地缓存中。第二次也是这样,但是使用它的项目不会被通知某些内容已更改。这就是为什么您应该使用所谓的SNASPHOT
…这意味着类似1.0.0-SNAPSHOT
…的版本,而不是…按照惯例,使用类似1.0.0-SNAPSHOT
的版本,因为从Mavens的角度来看,SNAPSHOT-1.0.0
是一个版本!第二次将永远不会检查它…因此,第一次执行mvn安装时,
jar将存储到本地缓存中。第二次也是这样,但是使用它的项目不会被通知某些内容已更改。这就是为什么您应该使用所谓的SNASPHOT的
…这意味着类似于1.0.0-SNAPSHOT的版本
…相反…可以省略范围编译,但不会影响结果,因为默认情况下是范围compile
。从依赖项声明中删除范围标记无助于范围编译,但是不会影响结果,因为默认情况下是scopecompile
。从依赖项声明中删除scope标记没有帮助