1

我已经为我的项目创建了一个 Maven 构建。构建成功。但是当我将它部署到服务器(apache tomcat 6)上时,它给出了有关 jar 文件的各种错误。但是这些 jar 文件在类路径上可用。但是当我保留服务器的lib目录中的那些jar文件然后该错误得到解决。所以,任何对此有任何想法的人..我在使用maven构建时做错了什么。

我的 pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 Test1 Test1 0.0.1-SNAPSHOT war Test1 http://maven.apache.org

<properties>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>
<repositories>
    <repository>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <layout>default</layout>
        <url>http://repo1.maven.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-core</artifactId>
        <version>1.3.10</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.8</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.10</version>
    </dependency>
    <dependency>
        <groupId>org.ow2.orchestra.eclipse.birt</groupId>
        <artifactId>org.ow2.orchestra.eclipse.birt.core</artifactId>
        <version>3.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.ow2.orchestra.eclipse.birt</groupId>
        <artifactId>org.ow2.orchestra.eclipse.birt.report.engine</artifactId>
        <version>3.7.0</version>
    </dependency>
    <dependency>
        <groupId>openforecast</groupId>
        <artifactId>openforecast</artifactId>
        <version>1.0.16</version>
        <scope>system</scope>
        <systemPath>D:/testing/WebContent/WEB-INF/lib/OpenForecast-0.5.0.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>net.sf.jsci</groupId>
        <artifactId>jsci</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-taglib</artifactId>
        <version>1.3.10</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>struts</groupId>
        <artifactId>struts-bean</artifactId>
        <version>1.2.7</version>
        <type>tld</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <properties>
                    <maven.compiler.target>1.6</maven.compiler.target>
                    <maven.compiler.source>1.6</maven.compiler.source>
                </properties>
                <encoding>ISO-8859-1</encoding>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <packagingExcludes>D:/Test1/src/main/webapp/WEB-INF/web.xml</packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

4

2 回答 2

3

您无需在 Tomcat 上部署 jar:您部署了一个 war 文件。战争包含一个 WEB-INF/lib 文件夹,其中包含您的库。

Tomcat 根目录下的 lib 文件夹仅用于在所有部署的应用程序之间共享的库。例如,数据库驱动程序。

检查您的 Maven 依赖项是否不在提供的范围。它们应该包含在您的WEB-INF/lib文件夹中。

于 2012-07-02T07:45:53.083 回答
0

首先是你对 servlet api 的依赖:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>

必须有一个像这样“提供”的范围,这意味着编译需要它们,但在运行时它将由 Tomcat 在这种情况下提供。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>

以下:

openforecast openforecast 1.0.16系统D:/testing/WebContent/WEB-INF/lib/OpenForecast-0.5.0.jar

表示您没有使用真正必须的存储库。永远不要在你的构建中使用系统范围的依赖,因为它们会使你构建环境特定。开始使用存储库管理器(Nexus、Artifactory 或 Archive)并在那里安装 openforecast。像你一样在你的 pom 和特别是 Maven Central 中定义存储库是不好的做法。

如果您已经在 pom 中定义了以下内容:

<properties>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>

不需要像这样配置maven-compiler-plugin ,因为 encoding 参数默认使用上述属性。

 <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <properties>
            <maven.compiler.target>1.6</maven.compiler.target>
            <maven.compiler.source>1.6</maven.compiler.source>
        </properties>
        <encoding>ISO-8859-1</encoding>
    </configuration>
</plugin>

您可以使用以下内容:

 <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
    </configuration>
</plugin>

但是你必须定义你使用的插件的版本:

 <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
    </configuration>
</plugin>

最好的办法是使用 pluginManagement 部分。

我想到的另一件事是,您使用的是旧的 maven-war-plugin,并且您在配置中使用了绝对路径,在任何情况下都应避免使用。

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
     <packagingExcludes>D:/Test1/src/main/webapp/WEB-INF/web.xml</packagingExcludes>
   </configuration>
</plugin>

正如网站所说,最新版本是 2.2 。如果您需要排除这样的事情,您应该通过以下方式进行:

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.2</version>
   <configuration>
     <packagingExcludes>${basedir}/src/main/webapp/WEB-INF/web.xml</packagingExcludes>
   </configuration>
</plugin>

但在这种情况下,我不明白你为什么喜欢排除 web.xml,因为它是战争文件的重要组成部分。也许你可以详细说明一下。

于 2012-07-02T13:07:37.877 回答