也许需要指出正确的方向,但是如果我添加一个“提供的”依赖项,而该依赖项不包含在 tomcat 提供的依赖项集中,则从 eclipse 中运行 tomcat7:run
失败并在提供的范围 jar 中的类上出现 classnotfoundexception
。
它需要“提供”,因为它是来 self 运行 mvn install 的单独项目的自定义 jar,并且为了生产,我将 jar 复制到 $CATALINA_BASE/shared 目录,以便它可以(作为单例)跨应用程序/网络应用程序。
<dependency>
<groupId>IndexFileAccessTracker</groupId>
<artifactId>IndexFileAccessTracker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
我看到的唯一方法(我对 Maven 和 Tomcat7 插件的了解有限)是在从 Eclipse 中的插件运行 tomcat 时将范围更改为 compile
,然后将范围更改回 在运行
。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 依赖项中提供
,因为我不希望它包含在已部署的 WAR 中。
最佳答案
使用配置文件解决,类似于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:
框中。
(附带说明,要逐步调试,我必须手动将项目添加到“源”选项卡。)
构建配置与 Goals:
框中的 package
相同;并且我离开了原始依赖以具有范围 provided
。
关于java - 使用添加的项目提供的依赖项运行 Tomcat Maven 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845828/