2010-08-21 119 views
2

我有一个简单的Maven2/Spring项目。在本地Intellij中,所有的测试运行良好,但是在构建服务器(Hudson)上,应用程序上下文不会启动,因为无法在类路径中找到test-context.xml。简单的Maven2类路径问题

新的这个......任何想法?假设这是明显的东西...

项目目录结构:

-src 
--java 
--resources 
-test 
--java 
---test-context.xml 

注:使本地没有区别,如果测试的context.xml是在测试/ java或测试/资源

相关位的pom:

<properties> 
    <org.springframework.version>3.0.3.RELEASE</org.springframework.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.build.testOutputDirectory>test-classes</project.build.testOutputDirectory> 
    <project.build.testSourceDirectory>test</project.build.testSourceDirectory> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-oxm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc-portlet</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>1.6</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.4</version> 
    </dependency> 

    <dependency> 
     <groupId>net.javacrumbs</groupId> 
     <artifactId>spring-ws-test</artifactId> 
     <version>0.19</version> 
    </dependency> 

    <dependency> 
     <groupId>org.codehaus.castor</groupId> 
     <artifactId>castor-xml</artifactId> 
     <version>1.3.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.2.2</version> 
    </dependency> 

    <dependency> 
     <groupId>hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>1.8.0.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.3.1.GA</version> 
    </dependency> 

    <dependency> 
     <groupId>javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.11.0.GA</version> 
    </dependency> 

    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time-hibernate</artifactId> 
     <version>1.2</version> 
    </dependency> 
</dependencies> 

<build> 
    <sourceDirectory>src/java</sourceDirectory> 
    <testSourceDirectory>test/java</testSourceDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <configuration> 
       <formats> 
        <format>xml</format> 
        <format>html</format> 
       </formats> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>test</phase> 
        <goals> 
         <goal>cobertura</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.4.3</version> 
      <configuration> 
       <junitArtifactName>junit:junit</junitArtifactName> 
       <includes> 
        <include>**/*Tests.java</include> 
       </includes> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <configuration> 
       <formats> 
        <format>xml</format> 
        <format>html</format> 
       </formats> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.4.3</version> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>findbugs-maven-plugin</artifactId> 
      <version>1.2</version> 
     </plugin> 
    </plugins> 
</reporting> 
+0

你可以显示引用spring上下文文件的测试类的摘录吗? – 2010-08-23 07:24:18

回答

0

你的test-context.xml位于何处?在src/test/resources文件夹中?你的pom是怎样的?否则,这将是某种“魔力”来回答这样子比较少的信息这个问题...

中的IntelliJ
+0

我已经添加了一些更多的细节,希望有助于。奇怪的是,完全相同的代码和相同的pom在本地工作,但上下文无法从服务器上的类路径加载。 – Thody 2010-08-21 15:18:06

+0

第一个问题:你为什么重新定义位置?像测试类等,而不是使用Maven的方式(约定优于配置)是否有特殊原因?另一方面,你可以通过Hudson的日志文件摘录看到详细的错误信息... – khmarbaise 2010-08-21 15:48:19

2

本地所有的测试运行正常

的问题是:你的项目构建罚款当在命令行上运行Maven时?这是重现问题的唯一方法(这也是参考,在任何IDE下运行的东西都不是真正相关的)。然后查看单元测试的痕迹(以target/surefire-reports的文本文件登录)。也可以附上他们的问题。

但是,在构建服务器(Hudson)上,应用程序上下文无法启动,因为无法在类路径中找到test-context.xml。

你如何加载它? PS:我也建议坚持Maven的默认项目布局。

+0

它们也可以通过命令行在本地运行良好。自从我做了pom设置已经有几天了,但我相信测试类并没有被cobertura拾取,所以我明确地引用了它们,尽管我没有改变位置。 我在测试中通过ContextConfiguration注释加载上下文。 来自测试报告: 引起:java.io.FileNotFoundException:类路径资源[test-context.xml]无法打开,因为它不存在 – Thody 2010-08-21 20:27:27

+0

@Thody您是否说您无法重现?这很烦人。这不知何故意味着你的构建依赖于环境,这不是一件好事。你能在哈德逊机器上重现吗?或者,也许提供哈德森的痕迹? – 2010-08-21 22:02:47