Mic*_*ght 2 java jasper-reports maven
为了拥有一个可执行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>
编辑:
考虑依赖性:
jasperreports_extension.properties 在里面(根级)
jasperreports-6.2.0.jarjasperreports_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)
我在尝试运行.jar后解决了这个签名问题:"无效的签名文件"
我假设你的问题是你有一个名为jasperreports_extension.properties项目资源的文件,位于里面src/main/resources.因为你依赖于jasperreports它也恰好jasperreports_extension.properties在类路径的根处调用了一个资源,所以在你创建时会覆盖另一个jar-with-dependencies.
要解决这个问题,你应该放弃maven-assembly-plugin并使用maven-shade-plugin.此插件提供开箱即用的一个变压器,能够合并两个属性文件一起:通过合并,我的意思是该文件的一个附加到另一个的结尾:
某些jar包含具有相同文件名的其他资源(例如属性文件).为避免覆盖,您可以选择通过将其内容附加到一个文件来合并它们.
在这种情况下,示例配置将是:
<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唯一提供基本支持.从他们的主页:
如果您的项目想要将工件打包在超级jar中,则程序集插件仅提供基本支持.要获得更多控制,请使用Maven Shade插件.
| 归档时间: | 
 | 
| 查看次数: | 1779 次 | 
| 最近记录: |