如何使用maven插件向嵌入式tomcat添加依赖项?

时间:2017-03-02 21:20:17

标签: java maven tomcat embedded-tomcat-7

更新

事实证明我的依赖关系没有任何问题。问题是我的战争中打包的 META-INF / context.xml 文件没有被tomcat插件读取。我仍在寻找一个解决方案,说明为什么它不起作用。

原始问题

我有一个多模块项目,如下所示:

myproject
+ - business
+ - app

其中" business"和" app"是" myproject"在他们的pom.xml中定义为父级。 app模块使用 context.xml 文件打包war文件,该文件包含JDBC连接池的定义。当war文件打包并部署到独立的tomcat实例时,一切正常。独立的tomcat实例在其 lib 类路径目录中具有所需的MySql连接器jar。

当我使用带有 tomcat7:run 目标的tomcat7 maven插件运行app模块然后访问我的应用程序时,我得到了" SQLException:没有合适的驱动程序"错误。如何让嵌入式tomcat在正确的时间看到MySql连接器jar?

myproject pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://maven.apache.org/POM/4.0.0"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.robsite</groupId>
  <artifactId>myproject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>app</module>
    <module>business</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>
          <path>/app</path>
          <contextReloadable>true</contextReloadable>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

app pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.robsite</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>app</artifactId>
  <packaging>war</packaging>

  <dependencies>
    <!-- Jersey modules -->
    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet</artifactId>
      <version>2.26-b01</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>2.25.1</version>
    </dependency>
    <!-- Spring modules -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.6.RELEASE</version>
    </dependency>
    <!-- Modules provided by web container -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- Dependency on business module and its provided dependencies -->
    <dependency>
      <groupId>com.robsite</groupId>
      <artifactId>business</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

1 个答案:

答案 0 :(得分:0)

在回答我原来的问题时,在加载Web应用程序之前,在tomcat插件中添加依赖项并在类加载器中加载类的方法是在插件中添加依赖项标记。

要解决真正的问题,我必须添加一个特定的配置来告诉tomcat插件从 app中存储的我的Web应用程序模块中读取 /META-INF/context.xml 文件/src/main/webapp/META-INF/context.xml

我的root myproject 父pom的更正后的pom.xml位于下方。

>>> dfp = df.set_index('time')

>>> dfp[(dfp.shift(-1) != dfp).any(1)]

       valueA  valueB
time                 
10:31       1       2
10:33       2       3
10:34       1       3
10:35       1       2

>>> dfp[(dfp.shift(1) != dfp).any(1)]

       valueA  valueB
time                 
10:31       1       2
10:32       2       3
10:34       1       3
10:35       1       2