运行 Tomcat 添加了项目提供依赖的 Maven 插件

Running Tomcat Maven plugin with added project provided dependency

也许需要指出正确的方向,但是如果我添加一个 "provided" 依赖项,它不包含在 tomcat 提供的依赖项集中,运行ning来自 eclipse 的 tomcat7:run 失败,来自提供的范围 jar 的 class 上的 classnotfoundexception

它需要 "provided" 因为它是来自我 运行 mvn 安装的单独项目的自定义 jar 并且为了生产正在将 jar 复制到 $CATALINA_BASE/shared 目录以便它在 applications/webapps 中可用(作为单例)。

    <dependency>
        <groupId>IndexFileAccessTracker</groupId>
        <artifactId>IndexFileAccessTracker</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>

我看到的唯一方法(我对 Maven 和 Tomcat7 插件的了解有限)是在 Eclipse 中从插件 运行ning tomcat 时将范围更改为 compile 和然后在 运行 达到 package 目标时将范围改回 provided

有解决办法吗?我尝试将依赖项添加到 tomcat maven 插件(将主要的 maven 依赖项保持为 provided 但得到相同的 class not found 错误:

            <!-- For Maven Tomcat Plugin -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <path>/CounterWebApp</path>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>IndexFileAccessTracker</groupId>
                    <artifactId>IndexFileAccessTracker</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </plugin>

同样,它需要在主 Maven 依赖项中 provided,因为我不希望它包含在已部署的 WAR.

tomcat7-maven-plugin 及其 run 目标

Requires dependency resolution of artifacts in scope: test

编译类路径中的所有内容也在测试类路径中。 这就是为什么它使用范围 compile.

因此,针对您的情况,解决方案是将您的依赖项标记为 test 甚至 (imo) 在语义上是正确的。

这将使库在本地 test-time 可用,但在最终工件中不可用。

使用配置文件解决,类似

...
</dependencies>
<profiles>
<profile>
    <id>runineclipse</id>
    <dependencies>
        <dependency>
            <groupId>IndexFileAccessTracker</groupId>
            <artifactId>IndexFileAccessTracker</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</profile>  
</profiles>
<build>
...

然后在我的 run/debug 配置中将 runineclipse 添加到 Profiles: 框中。 (附带说明,为了逐步调试,我必须手动将项目添加到“源”选项卡。)

Goals: 框中的构建配置与 package 相同;我离开了原来的依赖范围 provided.