需要在这个方向指向正确的方向,但是如果我添加一个未包含在tomcat提供的依赖项集中的"provided"依赖项,则从eclipse中运行 tomcat7:run
失败,并且在提供的范围jar中使用 classnotfoundexception
.
它需要“提供”,因为它是一个来自我运行mvn安装的单独项目的自定义jar,用于 生产环境 我将jar复制到$ CATALINA_BASE / shared目录,以便它可以跨应用程序/ webapps使用(作为单例) .
<dependency>
<groupId>IndexFileAccessTracker</groupId>
<artifactId>IndexFileAccessTracker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
我看到的唯一方法(我对Maven和Tomcat7插件的了解有限)是在从Eclipse中的插件运行tomcat时将范围更改为 compile
,然后在运行 package
目标时将范围更改回 provided
.
有解决方案吗?我尝试将依赖项添加到tomcat maven插件中(将主maven依赖项保持为 provided
但是找不到相同的类错误:
<!-- 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中 .
2 回答
tomcat7-maven-plugin及其
run
目标编译类路径上的Everythig也在测试类路径上 . 这就是为什么它与范围
compile
一起使用 .因此,您的案例中的解决方案是将您的依赖关系标记为
test
甚至(imo)在语义上是正确的 .这将使库在本地测试时可用,但不在最终工件中 .
使用配置文件解决,类似于https://stackoverflow.com/a/5951630
然后在我的运行/调试配置中将
runineclipse
添加到Profiles:
框中 . (另请注意,要完成调试步骤,我必须手动将项目添加到“源”选项卡 . )构建配置与
Goals:
框中的package
相同;并且我将原始依赖项保留为范围provided
.