我们正在使用 tycho v0.13 和 maven 3.0 来构建我们的产品。
我们在构建时收到以下错误/警告
错误 - 7 图标未在 C:\Users\AppData\Local\Temp\p2.brandingIron7115583353836584113\launcher.exe 使用 D:\Builds\workspace\plugins\icons\app-icon.ico 替换
ico 文件都是正确的。因此,窗口图标被标准的 eclipse 图标所取代。
我对 Tycho 本身并不太熟悉,但在这里我相信它使用的是 p2 附带的品牌代码(最初来自 PDE/Build)。
该代码从原始启动器可执行文件中提取图标图像,并在提供的 ico 文件中搜索匹配的图像。如果找到与大小和位深度完全匹配的图像,则替换该图像。启动器中嵌入了 7 个图像,提供的 ico 应提供与大小和位深度相匹配的图像。
错误消息表明在可执行文件中找到的 7 个图标在提供的 ico 文件中没有匹配的大小/位深度。
3.7.2 中附带的启动器包含以下尺寸(顺序无关紧要):
在 4.2 (3.8) 中发布的启动器包含以下尺寸:
我们有一些令人沮丧的时刻,我们得到了关于丢失图标的错误,所以我决定深入研究它。以下是我的发现……基本上是在 Andrew Niefer 的回答中添加了额外的信息。
对于 Windows,在本机启动器中替换图像的过程如下所述。处理由 p2 类完成:org.eclipse.pde.internal.swt.tools.IconExe
此类查看本机启动器的资源并注意其中的位图:它们的大小和颜色深度。然后它查看提供的图像。这可以是单独的 BPM 列表或包含多个 BMP 的 ICO 文件。还注明了它们的尺寸和颜色深度。这仅在所有提供的图像都未压缩时才有效。当一个或多个图像被压缩时,进程停止并且在本机启动器中没有位图被替换。接下来,它会尝试将提供的 BMP 大小和颜色深度与本机启动器中的匹配,并且在它们匹配的地方,它们会在本机启动器中被替换。当本机启动器中的一个或多个位图在提供的图像中不可用时,以下消息将写入System.err:
Error - <n> icon(s) not replaced in […]using […]
IconExe类有一个 main 方法,可以独立运行。它的第一个参数是需要修改的本机启动器,以下参数是提供的 BPM 或 ICO 文件。
对于 Eclipse 4.3(.x),本机启动器包含 7 个位图:
因此,要成功替换图像的过程,需要提供 7 个具有相同大小和深度的图像,或者作为单独的 BMP,或者在 ICO 中。
但是,当使用tycho-p2-publisher-plugin时,您不能提供 7 个单独的 BPM,因为tycho-p2-publisher-plugin在.product文件中指定时不知道 256x256x32 图像。它的类org.eclipse.tycho.model.Launcher仅从 .product 文件中读取其他 6 个图像位置,因此,第 7 个图像(256x256x32 的图像)被跳过。因此,IconExe获得的列表是一个简短的图像,并且将始终报告:
Error - 1 icon(s) not replaced in […]using […]
对我们有用的解决方案是将 7 个 BMP 合并到一个 ICO 文件中,并在.product文件中提供。
但请注意,一些可以创建 ICO 文件的图像处理应用程序在默认情况下倾向于压缩 256x256x32 图像。这就是让我们走错路的原因!所以要小心 ICO 文件中的所有图像都是未压缩的。
当我的 ICO 文件包含 3.7.2 时,我遇到了类似的问题
我使用 Gimp 从我的 ICO 文件中删除了未使用的层。
只是添加到以前的答案:
.ico 文件中的所有图像都应该是 BMP 格式,而不是 PNG。我已经看到至少有两个实用程序想要将 PNG 格式用于一个或多个图像。
如果您的目标是 Eclipse 4.2,那么您将不得不等待 Tycho 0.16.0(或使用已经可用的 SNAPSHOT 版本)才能获得包含最新 IconExe 的版本,该版本可处理 256x256 位图。如果您的 .ico 文件包含其中之一,那么它会在旧 IconExe 中导致读取错误,并且您的任何图标都不会被替换(并且您会收到如打开消息中所示的错误)。请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=384509。