如何在 Windows 上为 JavaFX 本地程序包设置自定义图标

9

我正在尝试在创建JavaFX打包的本地捆绑时更改exe文件的图标。 我尝试将图标添加到pom.xml中,但是它仍然不能正常工作,因为它会给出默认图标。
我使用的是Intellij IDEA IDE,其中包含一个Pom.xml,通过command = mvn jfx:build-native创建一个软件包。 这是我的pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>com.zenjava</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>1.5</version>
            <configuration>

                <mainClass>com.demoApp.testapp.testApplication</mainClass>

                <!-- only required if signing the jar file -->
                <keyStoreAlias>example-user</keyStoreAlias>
                <keyStorePassword>example-password</keyStorePassword>
                <permissions>
                    <permission>all-permissions</permission>
                </permissions>
                <icon>${basedir}/src/main/resources/images/logoIcon.ico</icon>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

    </plugins>
</build>

我已经将图标路径添加到pom.xml ${basedir}/src/main/resources/images/logoIcon.ico,这将在本地程序包执行时运行,但对我没有用。

有其他的方法吗? 请建议。


我尝试使用ant在pom.xml中使用fx标签,以下是我在pom.xml中进行的更改

<properties>

<javafx.tools.ant.jar>${env.JAVA_HOME}\lib\ant-javafx.jar</javafx.tools.ant.jar> </properties>


<plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>create-launcher-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target xmlns:fx="javafx:com.sun.javafx.tools.ant">
                                <taskdef
                                        uri="javafx:com.sun.javafx.tools.ant"
                                        resource="com/sun/javafx/tools/ant/antlib.xml"
                                        classpath="${javafx.tools.ant.jar}"/>
                                <fx:application id="fxApp"
                                                name="${project.name}"
                                                mainClass="com.precisionhawk.flightplanner.FlightPlannerApp"/>
                                <fx:jar destfile="${project.build.directory}/${project.build.finalName}-launcher">
                                    <fx:application refid="fxApp"/>
                                    <fx:fileset dir="${project.build.directory}/classes"/>
                                </fx:jar>
                                <attachartifact file="${project.build.directory}/${project.build.finalName}-launcher.jar"
                                                classifier="launcher"/>
                                <fx:deploy>
                                    <fx:info>
                                        <fx:icon href="${basedir}/src/main/deploy/logoIcon.ico"></fx:icon>
                                    </fx:info>

                                </fx:deploy>
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

但这并不可行。

你的代码中缺少Windows文件夹名称: <fx:icon href="${basedir}/src/main/deploy/logoIcon.ico"></fx:icon> - Ari
3个回答

13

我用Zonsky的javafx-maven-plugin遇到了同样的问题。在版本1.5中,会将src/main/deploy目录添加到类路径中。您想要使用的图标可以添加到其中,然后它将在本机构建器的类路径中可用!

我将src/main/deploy/package/windows/myapp.ico添加到其中,最终它起作用了 :)

为您:

  1. 创建src/main/deploy/package/windows/文件夹
  2. 添加名称为${project.build.finalName}.ico的图标
  3. 运行mvn jfx:build-native

我还没有深入研究过它-只是让它工作并想分享一下。因此,如果您想使用不同名称的图标,我不知道该怎么做。至少现在还没有。配置部分中的<icon>...</icon>部分似乎是用于WebStart的,所以我没有使用它。 希望您使其正常工作!


1
你需要查看日志来构建本地应用程序。这将告诉您安装程序在哪里查找图标文件以及使用哪个名称。对于默认的Windows本地应用程序,它会在./package/windows/'appname'.ico中查找。我记不清'appname'来自哪里,但只需在构建时查看日志,它会告诉您。(顺便说一下,我使用从我的pom调用的Ant目标)

构建本地应用时记录: [INFO] 正在构建本地安装程序 [DEBUG] 使用路径 'C:\Projects\DemoApp\src\main\deploy\logoIcon.ico' 中的图标文件 路径正确,但是包的图标设置为默认图标。 - user1859806
创建应用程序包:Facewizz在c:\dev\repositories\profile_planner\profileplanner\target\dist\bundles中。使用自定义软件包资源[应用程序图标](从类路径上的package/windows/Facewizz.ico加载)是我得到的。看起来你的日志记录来自Maven插件。在我看来,您从原始构建工具中抽象出的越多,失败的机会就越多。 - Nicolas Mommaerts
你使用的Java版本是什么?我突然发现当我使用7.0.17构建我的应用程序时,图标也没有设置。但在7.0.12-ea版本中是有设置的,所以这可能是一个将在bugfix版本中修复的错误。 - Nicolas Mommaerts
请参见此处 https://blogs.oracle.com/talkingjavadeployment/entry/packaging_improvements_in_jdk_7 有关fx:icon的打包改进。 - Nicolas Mommaerts
是的,使用Java7.0.17。该博客提供了将添加到build.xml文件中的详细信息,因为我的项目不包含任何build.xml文件,我正在使用Maven,因此项目包含一个pom.xml,在fx:deploy标签上出现错误。 - user1859806
显示剩余3条评论

0
     you can do this:
      `<plugin>
            <groupId>com.zenjava</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>8.8.3</version>
            <configuration>
                <vendor>YourCompany</vendor>
                <mainClass>com.alan344.MapperGenApplication</mainClass>
                <appName>mybatis-friend</appName>
                <bundleArguments>
                    <icon>${project.basedir}/src/main/resources/image/icon.ico</icon>
                </bundleArguments>
            </configuration>
        </plugin>`

你应该编辑你的问题,添加一个最小可重现示例,以展示问题。 - Mebin Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接