我正在尝试使用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下的项目中,但似乎无法找到它。
有谁能告诉我我做错了什么或为什么这不起作用?
答案 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>