2011-12-05 86 views
2

我正在嘗試使用jasperreports-maven-plugin使用Jasper。從目標/ jasper讀取.jasper文件

因此,您可以在src/main/jasperreports目錄中創建.jrxml,然後插件將其編譯並在target/jasper中創建.jasper文件。 到目前爲止,這是工作。

現在我想將這個.jasper文件讀入Java類以填充報表。這是我的問題所在。我如何從target/jasper訪問這個.jasper文件?

我認爲我需要將其添加爲額外的資源目錄在我的pom.xml:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
     <resource> 
      <directory>target/jasper</directory> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jasperreports-maven-plugin</artifactId> 
      <configuration> 
       <outputDirectory>${project.build.directory}/jasper</outputDirectory> 
      </configuration> 
      <executions> 
       <execution> 
       <goals> 
        <goal>compile-reports</goal> 
       </goals> 
       </execution> 
      </executions> 
     ... 

然後它使用的getResource這樣得到:

URL resource = getClass().getResource("/target/jasper/DataSourceReport.jasper"); 

然而,這將返回null。 DataSourceReport.jasper文件位於我的項目target/jasper下,但它似乎無法找到它。

任何人都可以告訴我我做錯了什麼或爲什麼這是行不通的?

回答

0

的問題更多的是如何從資源在Java中加載文件,比碧玉插件等

插件做的工作,你需要的是正確加載文件(開發文件)到您的申請。

資源取決於您創建的jar。因此,您可能會因爲報告定義而跳過該位置。嘗試打開jar文件,並檢查是否包含報告。

Here描述瞭如何管理Java項目中的資源。

1

謝謝。 這確實是我忽略的。資源元素只確保文件夾在Eclipse中作爲資源導入,但我需要添加另一個Maven插件來指定多個資源文件夾添加到創建的jar中。我認爲這是由資源元素完成的。

這是我添加了什麼,使其工作:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>add-source</goal> 
      </goals> 
      <configuration> 
      <sources> 
       <source>${basedir}/src/main/resources</source> 
       <source>${project.build.directory}/jasper</source> 
      </sources> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
1

您可以使用YourClassName.class.getResourceAsStream(jasperLocation)將返回該文件的您輸入流的InputStream和可以傳遞給JRLoader 。它可能會幫助你。