在我的java-SWT项目中,我有一堆.svg
格式的图标,但我不知道如何从.svg
资源中创建SWT图像,所以我首先使用ImageMagick将它们转换为.png
。.svg
文件仍然是"源"图像:当我想编辑图标时,我总是编辑.svg
文件,而不是.png
文件。
(如果您能告诉我如何从.svg
资源创建SWT映像,我将不胜感激,但这不是实际问题。
现在我正在手动启动 svg 到 png 的转换:每次我更改其中一个.svg
文件时,我都会运行一个 shell 脚本,该脚本反复调用 ImageMagick 将它们全部转换为.png
并将它们存储在正确的资源文件夹中,然后构建步骤将它们从该文件夹复制到正在运行的应用程序可以找到它们的输出文件夹。
我想知道两件事:
-
如何在 maven 构建中自动执行 svg 到 png 的转换,以便在我执行
mvn clean install
时进行完全转换,并且只有实际更改的.svg
个文件在我执行mvn install
时进行转换(没有clean
)。 -
如何说服IntelliJ IDEA也这样做。(因为在大多数情况下,我喜欢能够在IDEA中点击"构建和运行",而无需为maven而烦恼。
我完全不介意生成的.png
文件是否直接转到项目输出文件夹树中的资源目录,而不是源文件夹树下的资源目录。 这实际上可以节省"复制资源"步骤,所以会很好。
因此,这个问题本质上是关于自定义编译的:.svg
文件可以被认为是源文件,.png
文件可以被认为是二进制输出文件,而 ImageMagick 可以被认为是编译器。 这个问题可以重述为如何使用a)maven和b)intelliJ IDEA为这些工具默认不知道的自定义编译器进行"制作"。
- 创建一个pom模块,这是一个子项目,它生成一个包含.png资源的jar,从.svg文件生成。
src/main/svg/...
也许吧。 - 然后将依赖项添加到使用 jar 中的该库 jar。
- 使用 ClassLoader 来获取资源。
这有点不必要的迂回,但形成了一条清晰的生产线。
一种选择是 mavenexec插件。
另一种方法是将java蜡染库用于svg。