或许需要指出正确的方向,但如果我添加一个"提供"在未提供的依赖关系的tomcat集合中包含的依赖项,从eclipse中运行tomcat7:run
失败,并且在提供的范围jar的类中使用classnotfoundexception
。
它需要"提供"因为它是一个单独的项目中的自定义jar,我已经运行了mvn install和for production am将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
,然后将范围更改回provided
在运行package
目标时。
有解决方案吗?我尝试将依赖项添加到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中。
答案 0 :(得分:0)
tomcat7-maven-plugin及其run
目标
需要在范围内对工件进行依赖性解析:test
编译类路径上的Everythig也在测试类路径上。
这就是为什么它使用范围compile
。
因此,您的案例中的解决方案是将您的依赖关系标记为test
甚至(imo)在语义上是正确的。
这将使库在本地测试时可用,但不在最终工件中。
答案 1 :(得分:0)
使用配置文件解决,类似于https://stackoverflow.com/a/5951630
...
</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>
...
然后在我的运行/调试配置中,将runineclipse
添加到Profiles:
框中。
(另请注意,要完成调试步骤,我必须手动将项目添加到“源”选项卡。)
package
框中的构建配置与Goals:
相同;我将原始依赖项保留为范围provided
。