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

时间:2016-01-18 01:12:16

标签: java maven tomcat maven-3 maven-plugin

或许需要指出正确的方向,但如果我添加一个"提供"在未提供的依赖关系的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中。

2 个答案:

答案 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