2017-03-20 20 views
1

我試圖獲得一個json文件資源,以便使用它來構建java對象。當我嘗試在Intellij中運行我的代碼時,我沒有任何問題,但是當我使用mvn test運行時,出現跟隨錯誤。使用maven獲取測試文件資源

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project cadastur-backend-business: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: There was an error in the forked process 
[ERROR] java.lang.RuntimeException: Unable to create test class 'guiaVOTemplate.json' 
[ERROR] at org.apache.maven.surefire.util.DefaultScanResult.loadClass(DefaultScanResult.java:135) 
[ERROR] at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:95) 
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:222) 
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:107) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
[ERROR] Caused by: java.lang.ClassNotFoundException: guiaVOTemplate.json 
[ERROR] at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[ERROR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[ERROR] at org.apache.maven.surefire.util.DefaultScanResult.loadClass(DefaultScanResult.java:131) 
[ERROR] ... 6 more 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException 
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command 
[ERROR] mvn <goals> -rf :cadastur-backend-business 

該項目後續的結構:

Project Structure Image

及更高版本已經在那裏我試圖讀取文件和JSON轉換成Java對象的代碼。

package br.gov.mtur.cadastur.builder; 

import br.gov.mtur.cadastur.vo.*; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import java.io.IOException; 

public class GuiaVOBuilder { 

    private GuiaVO guia; 

    public GuiaVOBuilder() { 
     this.guia = new GuiaVO(); 
    } 

    public GuiaVOBuilder comId(Integer id) { 
     guia.setId(id); 
     return this; 
    } 

    public GuiaVOBuilder comPessoaFisica(PessoaFisicaVO pessoaFisica) { 
     guia.setPessoaFisica(pessoaFisica); 
     return this; 
    } 

    ... //Builder methods 

    public GuiaVO build(){ 
     return guia; 
    } 

    public GuiaVO buildGuiaCompleto() throws IOException { 
     return new ObjectMapper().readValue(GuiaVOBuilder.class.getResource("/guiaVOTemplate.json"), GuiaVO.class); 
    } 
} 
+0

嘗試將'guiaVOTemplate.json'文件複製到'src \ main \ resources'並查看它是否有效。 –

+0

謝謝@RITZXAVI,現在它對我很有用,但是你知道爲什麼我不能把json文件放在src \ test \ resources'中嗎? –

+0

當然。它是如何工作的? –

回答

0

複製guiaVOTemplate.json文件src\main\resources,它應該工作。

0

我發現我的錯誤,在主要的pom.xml,maven-surefire插件包括所有文件,因爲這是我得到Unable to create test class 'guiaVOTemplate.json'。所以我可以在擴展列表中解決這個擴展文件.json,如下所示。而我的guiaVOTemplate.json仍然在src/test/resources

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <includes> 
      <include>**/*</include> 
     </includes> 
     <excludes> 
      <exclude>**/*.json</exclude> 
     </excludes> 
    </configuration> 
</plugin>