ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – jasperreports_extension.properties由maven程序集插件覆盖

2019-09-28 01:03:03  阅读:261  来源: 互联网

标签:java maven jasper-reports


为了拥有一个可执行jar,我包含了maven依赖项.一切正常,但jasperreports_extension.properties. Jasper已经有一个替换我的默认值.

我想知道如何将两个文件(默认文件和自定义文件)组合到jar文件中.实际上我已经手动组合了两个设置,现在我想找到替换程序集插件复制的文件的方法,我已经合并了.

这是我当前的maven程序集插件设置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin.version}</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>
                            com.test.sample.MainClass
                        </mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

这些是我在报告中添加一些字体的自定义设置:

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
net.sf.jasperreports.extension.simple.font.families.ireportfamily1453367638844=fonts/fontsfamily1453367638844.xml

和依赖:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.2.0</version>
</dependency>

编辑:

考虑到dependencies

> jasperreports_extension.properties在里面(根级)
JasperReports的-6.2.0.jar
> jasperreports_extension.properties在里面(根级)
jasperreports-fonts-6.0.0.jar(这只是一个测试依赖项)

在我用一个阴影替换了程序集插件之后,我报告的初始问题是固定的,但是我得到了这个新问题:

    Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: no manifiest section for signature file entry org/bouncycastle/mail/smime/SMIMEEnvelopedGenerator$EnvelopedGenerator.class
        at sun.security.util.SignatureFileVerifier.verifySection(Unknown Source)
        at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
        at sun.security.util.SignatureFileVerifier.process(Unknown Source)
        at java.util.jar.JarVerifier.processEntry(Unknown Source)
        at java.util.jar.JarVerifier.update(Unknown Source)
        at java.util.jar.JarFile.initializeVerifier(Unknown Source)
        at java.util.jar.JarFile.getInputStream(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
        at sun.misc.Resource.cachedInputStream(Unknown Source)
        at sun.misc.Resource.getByteBuffer(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我在此之后解决了这个签名问题:“Invalid signature file” when attempting to run a .jar

解决方法:

我假设你的问题是你有一个名为jasperreports_extension.properties的文件作为项目的资源,位于src / main / resources中.因为你依赖于jasperreports,而且恰好在类路径的根目录中有一个名为jasperreports_extension.properties的资源,所以当你创建jar-with-dependencies时,会覆盖另一个.

要解决此问题,您应该删除maven-assembly-plugin并使用maven-shade-plugin.这个插件提供了开箱即用的transformer that is able to merge two properties file together:通过合并,我的意思是其中一个文件被附加到另一个文件的末尾:

Some jars contain additional resources (such as properties files) that have the same file name. To avoid overwriting, you can opt to merge them by appending their content into one file.

在这种情况下,示例配置将是:

<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.4.3</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
            <resource>jasperreports_extension.properties</resource>
          </transformer>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>com.test.sample.MainClass</mainClass>
          </transformer>
        </transformers>
        <createDependencyReducedPom>false</createDependencyReducedPom>
      </configuration>
    </execution>
  </executions>
</plugin>

这将生成一个最终的胖JAR,其中jasperreports_extension.properties的内容将是您的文件的内容和来自依赖项的文件.

此外,它还将有一个正确的MANIFEST,因为我们指定了插件哪个类是主类.

作为旁注,当你制作胖JAR时,maven-assembly-plugin只提供基本支持. From their homepage

If your project wants to package your artifact in an uber-jar, the assembly plugin provides only basic support. For more control, use the Maven Shade Plugin.

标签:java,maven,jasper-reports
来源: https://codeday.me/bug/20190928/1825241.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有