运行 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
.
也许需要指出正确的方向,但是如果我添加一个 "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
.