包含共享jar的Maven编译但不能实时工作

时间:2017-01-22 16:42:32

标签: java maven jar shared-libraries war

我有两个项目:

ProjectA和SharedProject。

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

usernameObservable
        .skip(2)
        .debounce(800, TimeUnit.MILLISECONDS)
        .flatMap(username -> apiService.isAvailable(username))
        .subscribe(isAvailableResult -> {
            // react here
        }, throwable -> {
            // show an error here
        });

共享项目的pom看起来像这样:

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

我的ProjectA编译(实际上确实使用了来自SharedProject的导入),所以我继续为我做这件事。

运行后出现问题:ProjectA - &gt; mvn安装 并在tomcat上运行 我收到错误:

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

这个未找到的类位于SharedProject中,并在ProjectA web.xml文件中引用。这是ProjectA web.xml特定的参考代码:

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)

1 个答案:

答案 0 :(得分:0)

从依赖关系声明中删除范围标记,一切都会好的。

范围compile对maven说,这种依赖只能在编译时使用。例如,它在MapStruct中使用,它在编译阶段生成代码,之后不需要依赖项。