??xml version="1.0" encoding="utf-8" standalone="yes"?>BlogJava-首页技术区http://www.qpkxbc.shop/专注于Java技?/description>zh-cnThu, 02 May 2019 12:33:25 GMTThu, 02 May 2019 12:33:25 GMT60Maven-Shade-Plugin打包SWT及JFace遇到的问题及解决Ҏhttp://www.qpkxbc.shop/feenn/archive/2019/04/29/433739.htmlFeennFeennMon, 29 Apr 2019 08:33:00 GMThttp://www.qpkxbc.shop/feenn/archive/2019/04/29/433739.htmlhttp://www.qpkxbc.shop/feenn/comments/433739.htmlhttp://www.qpkxbc.shop/feenn/archive/2019/04/29/433739.html#Feedback0http://www.qpkxbc.shop/feenn/comments/commentRss/433739.htmlhttp://www.qpkxbc.shop/feenn/services/trackbacks/433739.html一、问?/h3> 当开?nbsp;minimizeJar 后,_的Jarq行会出现如下错误:

The image could not be loaded: FileImageDescriptor(location=class org.eclipse.jface.dialogs.TitleAreaDialog, name=images/title_banner.png)
org.eclipse.jface.resource.DeviceResourceException: Unable to create resource FileImageDescriptor(location=class org.eclipse.jface.dialogs.TitleAreaDialog, name=images/title_banner.png)
        at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184)
        at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55)
        at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88)
        at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195)
…………

出现q个错误的直接现象是所有的囄——包括图标——都无法正显C?br />

二、分?/h3> 开始以为是resources打包错误D没有被压qjar包,不过分析jar包内容发现ƈ没有文g~失Q然后开始分析minimizeJar的机制。文档上_

<minimizeJar>
When true, dependencies will be stripped down on the class level to only the transitive hull required for the artifact. Note: Usage of this feature requires Java 1.5 or higher.

由此来看Qshade做的只是做了静态调用分析,q没有做动态类加蝲q行分析Q因此极大可能问题是出在q里了。而且从抛出的异常来看Q有可能是图片文件格式无法解析导致了囄资源创徏p|?br />
那么之后的调试方法就单了Q首先上verbose大法Q直接加verbose:class参数Q分别运行正常的和异常的Jar包,从输Z息发C端倪:

[Loaded java.lang.IndexOutOfBoundsException from C:\Program Files\Java\jre1.8.0_151\lib\rt.jar]
[Loaded java.lang.ArrayIndexOutOfBoundsException from C:\Program Files\Java\jre1.8.0_151\lib\rt.jar]
[Loaded org.eclipse.swt.internal.image.WinBMPFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.GIFFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.WinICOFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGSegment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGFixedSizeSegment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGStartOfImage from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PNGFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngInputStream from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngDecodingDataStream from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngChunkReader from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIhdrChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngFileReadState from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngPlteChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIdatChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIendChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngTrnsChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.win32.BITMAPINFOHEADER from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$ToolTipOwnerControlListener from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$$Lambda$19/1873653341 from org.eclipse.jface.window.ToolTip]
[Loaded org.cncert.xac.utils.ResourceManager from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.widgets.ToolItem from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.win32.TBBUTTON from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.resource.AbstractResourceManager$RefCount from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.layout.FormData from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.layout.FormAttachment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.dialogs.TitleAreaDialog$1 from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$TooltipHideListener from file:/E:/Temp/*****.jar]

注意上方U色的字体,在异常的Jar包输Z是没有的Q同时检查了Jar包中果然没有打包q几个类Q将q几个类手动加入Jar包后Q异常的Jar包可以正常运行了?br />
从源代码看,q几个类型是SWT在运行时动态加载的Q由 org.eclipse.swt.internal.image.FileFormat 动态加载,相关代码如下Q?br />
package org.eclipse.swt.internal.image;


import java.io.*;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;

/**
 * Abstract factory class for loading/unloading images from files or streams
 * in various image file formats.
 *
 
*/
public abstract class FileFormat {
    static final String FORMAT_PACKAGE = "org.eclipse.swt.internal.image"; //$NON-NLS-1$
    static final String FORMAT_SUFFIX = "FileFormat"; //$NON-NLS-1$
    static final String[] FORMATS = {"WinBMP", "WinBMP", "GIF", "WinICO", "JPEG", "PNG", "TIFF", "OS2BMP"}; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$//$NON-NLS-5$ //$NON-NLS-6$//$NON-NLS-7$//$NON-NLS-8$

    LEDataInputStream inputStream;
    LEDataOutputStream outputStream;
    ImageLoader loader;
    int compression;

static FileFormat getFileFormat (LEDataInputStream stream, String format) throws Exception {
    Class<?> clazz = Class.forName(FORMAT_PACKAGE + '.' + format + FORMAT_SUFFIX);
    FileFormat fileFormat = (FileFormat) clazz.getDeclaredConstructor().newInstance();
    if (fileFormat.isFileFormat(stream)) return fileFormat;
    return null;
}

三、Maven配置的修?/h3> 在官Ҏ档中Q可以用filter来显式包含不惌minimizeJar优化掉的内容Q但是目前filterq无法做到针对一个artifact中选择性对某个目录下的文g不做优化?br /> 例如Q我希望shade不对org/eclipse/swt/internal/image/**做优化,我的配置是这LQ?br />
<filter>
     <artifact>org.eclipse:swt.win32.x86_64</artifact>
     <includes>
          <include>org/eclipse/swt/internal/image/**</include>
     </includes>
</filter>

但最l的l果是只打包了这个目录内的类Q而这个artifact中的其他cd部被removedQ因?a href="https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html">官方demo中有q样一句话Q?br />
As of version 1.6, minimizeJar will respect classes that were specifically marked for inclusion in a filter. Note that specifying an include filter for classes in an artifact implicitly excludes all non-specified classes in that artifact.

所以我只能让shadeswt的artifact全部保留Q不做优化?br />
<filter>
       <artifact>org.eclipse:swt.win32.x86_64</artifact>
       <includes>
                <include>**</include>
       </includes>
</filter>

或者用artifactSet辑ֈ同样的效果?br />

四、ȝ

  1. 目前shade的机制是静态分析,所以可能会优化掉很多动态加载的c,对于使用动态加载较多的工程Q在发布旉要特别注意?
  2. 目前shade的配|无法在一个artifact内显式指定某个\径不优化Q或许有Q但我确实没扑ֈQ欢q知道的朋友留言告知Q,只能昑ּ保留整个artifact不做优化?


Feenn 2019-04-29 16:33 发表评论
]]>
Flowable6.6.0开发\U图Q?0190418Q?/title><link>http://www.qpkxbc.shop/ouyida3/archive/2019/04/18/433722.html</link><dc:creator>ouyida3</dc:creator><author>ouyida3</author><pubDate>Thu, 18 Apr 2019 01:07:00 GMT</pubDate><guid>http://www.qpkxbc.shop/ouyida3/archive/2019/04/18/433722.html</guid><wfw:comment>http://www.qpkxbc.shop/ouyida3/comments/433722.html</wfw:comment><comments>http://www.qpkxbc.shop/ouyida3/archive/2019/04/18/433722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.qpkxbc.shop/ouyida3/comments/commentRss/433722.html</wfw:commentRss><trackback:ping>http://www.qpkxbc.shop/ouyida3/services/trackbacks/433722.html</trackback:ping><description><![CDATA[     摘要: 21天前Q增加了6.6.0的\U图Q主要是DMNQ?<br>同时Q?.5.0有点延迟了?nbsp; <a href='http://www.qpkxbc.shop/ouyida3/archive/2019/04/18/433722.html'>阅读全文</a><img src ="http://www.qpkxbc.shop/ouyida3/aggbug/433722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.qpkxbc.shop/ouyida3/" target="_blank">ouyida3</a> 2019-04-18 09:07 <a href="http://www.qpkxbc.shop/ouyida3/archive/2019/04/18/433722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 后箋内容L步公众号?8岁fantasy?http://www.qpkxbc.shop/freeman1984/archive/2019/04/03/433700.html疯狂疯狂Wed, 03 Apr 2019 01:55:00 GMThttp://www.qpkxbc.shop/freeman1984/archive/2019/04/03/433700.html
https://www.jianshu.com/u/236331ad452f

定期发布一些技术和产品内容Q欢q一起交?img src ="http://www.qpkxbc.shop/freeman1984/aggbug/433700.html" width = "1" height = "1" />

疯狂 2019-04-03 09:55 发表评论
]]>
1һ152ͼ ʱʱ ʱʱн첻 ˫ɫͼ˰һŵ ѡôн 3d ʱʱ淨 ͧ5 ʱʱԤ pk10ȶƻ ʱʱǹ