2010-08-21 26 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