从target / jasper中读取.jasper文件

时间:2011-12-05 13:21:40

标签: java maven resources jasper-reports

我正在尝试使用Jasper使用jasperreports-maven-plugin。

因此,您在目录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下的项目中,但似乎无法找到它。

有谁能告诉我我做错了什么或为什么这不起作用?

5 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用 YourClassName.class.getResourceAsStream(jasperLocation)它将返回您可以传递给JRLoader的文件和输入流的输入流。它可能对你有帮助。

答案 2 :(得分:0)

问题更多的是如何从Java中的资源加载文件,而不是Jasper插件等。

插件可以正常工作,您需要的是将文件(.jasper)正确加载到您的应用程序中。

资源取决于您创建的jar。因此,可能是您使用报告定义跳过该位置。尝试打开jar文件并检查其中是否包含报告。

Here描述了如何在Java项目中管理资源。

答案 3 :(得分:0)

在ireport中打开.jasper文件。 ireport中有多个选项只需打开该文件,然后您将看到一个弹出窗口&#34;您是否需要将此文件转换为.jrxml?&#34;点击&#34;是&#34;。

答案 4 :(得分:0)

通过这种方式,每次运行应用程序时,jrxml都会每次运行。我的建议是使用JasperReports依赖项从类存储库编译jasper。像

将jasper存储库保留在类路径下 通过以下代码加载并编译它:

       //jasper is the repository under classses repo
       //ReceiveReport.jasper is the report file
       jasperStream = this.getClass().getResourceAsStream("/jasper/ReceiveReport.jasper");

使用此依赖项

       <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports-fonts</artifactId>
            <version>6.0.0</version>
        </dependency>