Maven构建没有运行

时间:2012-07-02 07:39:43

标签: maven-2

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

我的pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd“>     4.0.0     测试1     测试1     0.0.1-SNAPSHOT     战争     测试1     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>

2 个答案:

答案 0 :(得分:3)

您没有在Tomcat上部署jar:部署war文件。 war包含一个WEB-INF / lib文件夹,其中包含您的库。

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

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

答案 1 :(得分: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就像bad practice to define repositories一样,特别是Maven Central就像你一样。

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

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

不需要maven-compiler-plugin的配置,因为编码参数默认使用上述属性。

 <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 the web-site says。如果你需要排除这样的事情,你应该按照以下方式进行:

<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,因为它是war文件的一个重要部分。也许你可以详细说明一点。