Java Maven Jasperreport从Eclipse运行Ok,从带有Java-jar JRRuntimeException:图表主题的;“眼睛.糖果.六十年代”;找不到

Java Maven Jasperreport从Eclipse运行Ok,从带有Java-jar JRRuntimeException:图表主题的;“眼睛.糖果.六十年代”;找不到,java,maven,jasper-reports,Java,Maven,Jasper Reports,我创建了一个Java程序,它使用JasperReports创建一个报告。 在我的一篇JasperReports中,我使用了主题=“eye.candy.sixties” 当我在gui中从Eclipse运行项目时,一切正常,请参阅 但是,当我使用Maven构建同一个项目并从命令行运行它时,我得到了一个错误: Maven: clean compile assembly:single Command line: java -jar chartTheme-0.0.1-SNAPSHOT-jar-with-

我创建了一个Java程序,它使用JasperReports创建一个报告。 在我的一篇JasperReports中,我使用了主题=“eye.candy.sixties”

当我在gui中从Eclipse运行项目时,一切正常,请参阅

但是,当我使用Maven构建同一个项目并从命令行运行它时,我得到了一个错误:

Maven: clean compile assembly:single
Command line: java -jar chartTheme-0.0.1-SNAPSHOT-jar-with-dependencies.jar
线程“main”net.sf.jasperreports.engine.JRRuntimeException中的异常:未找到图表主题“eye.candy.sixties”

我错过了什么,我应该改变什么?欢迎任何帮助

可以在Github上找到源代码:

我确实在Maven中包含了图表主题依赖项,请参见“Eclipse中的Maven依赖项列表:

在下面的代码中(pom.xml)


4.0.0
com.lightroomstatistics.samples
图表主题
0.0.1-快照
图表主题
图表主题
www.lightroomstatistics.com
光室统计
www.lightroomstatistics.com
com.lightroomstatistics.maven
lightroomstatistics父pom
1.0.0
1.8
6.4.0
4.0.0
1.8
1.8
jr ce发布
JasperReports CE发布
http://jaspersoft.jfrog.io/jaspersoft/jr-ce-releases
net.sf.jasperreports
jasperreports
${jasperreports.version}
net.sf.jasperreports
jasperreports字体
${jasperreportsfonts.version}
net.sf.jasperreports
jasperreports图表主题
${jasperreports.version}
报告
**/*.*
数据
**/*.*
maven资源插件
3.0.2
复制报告资源
验证
复制资源
${basedir}/target/reports
报告
真的
复制数据资源
验证
复制资源
${basedir}/target/data
数据
真的
maven汇编插件
chartTheme.ChartThemesApp
带有依赖项的jar
组装
包裹
单一的

如果打开构建的联合库
chartTheme-0.0.1-SNAPSHOT-jar-with-dependencies.jar
,您会发现文件
jasperreports-char-themes-6.4.0.jar/jasperreports\u扩展名的内容
有误,因为它们被其他一些
jasperreports>的内容覆盖_extension.properties
文件也存在于依赖项中

事实上,如果在运行
mvn assembly
后在输出控制台中搜索,您将发现以下跟踪:

[INFO]jasperreports\u extension.properties已添加,正在跳过

…顺便说一句,这不是程序集上跳过的唯一一个文件

因此,由于重叠,将所有这些依赖项组装在一起肯定不是一个好主意。至少,不是以这种方式


我认为您应该尝试的第一件事是将参数化,以排除不需要的文件,然后优先选择所需的文件,我认为这些文件将是
jasperreports chart themes.jar中的文件(根据您发布的日志中的跟踪)。

感谢您研究此问题。小桑蒂向我解释了问题所在。 我也不喜欢有一个大JAR,我决定把所有依赖JAR放在一个单独的lib目录/文件夹中

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>chartTheme.ChartThemesApp</mainClass>
                    </manifest>
                </archive>
                <finalName>${project.name}</finalName>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins
maven jar插件
真的
解放党/
chartTheme.ChartThemesApp
${project.name}
org.apache.maven.plugins
maven依赖插件
2.5.1
复制依赖项
包裹
复制依赖项
${project.build.directory}/lib/

我认为这比拥有一个大罐子要好得多。祝贺你!
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>chartTheme.ChartThemesApp</mainClass>
                    </manifest>
                </archive>
                <finalName>${project.name}</finalName>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>