Статьи

Как изменить значок исполняемого файла платформы NetBeans с помощью Maven

При создании приложения на основе многофункциональной клиентской платформы NetBeans вы, вероятно, захотите в конечном итоге выпустить его под собственным брендом. Одной из частей этого бренда является значок исполняемого файла.

Поскольку значки являются двоичными файлами, встроенными в исполняемые файлы Windows, нам нужен внешний инструмент, чтобы взломать наш собственный фирменный значок в сгенерированный исполняемый файл. Этот пост описывает, как сделать это, используя maven в качестве инструмента для сборки.

Полная конфигурация

  • запустить MVN NBM: Строить-монтажник раз в MyProject / прикладную папке
  • скопируйте myProject / application / target / installer / nbi / stub / template.xml в myProject / application / installer / template.xml
  • скопируйте свой собственный значок 48×48 png или gif в myProject / application / installer /
  • создайте файл .ico из иконки png с помощью gimp или другого графического редактора

MyProject / pom.xml:

    <properties>
        <brandingToken>agrosense</brandingToken>
        <application.ico>${basedir}/installer/agrosense.ico</application.ico>
...
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>nbm-maven-plugin</artifactId>
                    <version>3.8.1</version>
                    <extensions>true</extensions>
                    <configuration>
                        <brandingToken>${brandingToken}</brandingToken>
                        <cluster>${brandingToken}</cluster>
                        <etcConfFile>${basedir}/installer/application.conf</etcConfFile>
                        <templateFile>${basedir}/installer/template.xml</templateFile>
                         <userSettings>
                            <releaseVersion>${releaseVersion}</releaseVersion>
                            <!-- this will replace the icon in the upper left corner of the installation wizard -->
                            <nbi.instleftcorner.file>${basedir}/installer/agrosense_icon48.png</nbi.instleftcorner.file>
                            <!-- this will replace the icon file in the installed application folder -->
                            <nbi.icon.file>${basedir}/installer/agrosense_icon48.png</nbi.icon.file>
                        </userSettings>                    
                    </configuration>
                </plugin>

  • установить  Resource Hacker   (при использовании linux сначала установите Java в бутылку вина, а затем установите Resource Hacker в ту же бутылку)
  • добавьте профиль локальной конфигурации в ваш ~ / .m2 / settings.xml (при необходимости измените):
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>replace-icon-config</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <wine.bottle>${user.home}/.bottles/iconFixer</wine.bottle>
                <resourcehacker.installdir>C:\Program Files (x86)\Resource Hacker\</resourcehacker.installdir>
            </properties>
        </profile>
    </profiles>
</settings>
  • добавьте следующие профили в ваш myProject / application / pom.xml . (они не привязаны к конкретному приложению, поэтому должны работать без настройки)
         <profile>
            <id>replace-icon-unix</id>
            <activation>
                <os>
                    <family>Unix</family>
                </os>
                <file>
                    <exists>${wine.bottle}\drive_c\${resourcehacker.installdir}\ResHacker.exe</exists>
                </file>                     
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId> 
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>                        
                                <configuration>
                                    <target> 

                                        <echo message ="Replacing icon of Windows launcher executable" /> 
                                        <!-- replace executable with ResHacker.exe path on windows -->
                                        <exec executable="wine" resolveexecutable="true" logerror="true">
                                            <!-- replace value with location of installation bottle, or remove on windows -->
                                            <env key="WINEPREFIX" value="${wine.bottle}" />
                                            <!-- remove this argument when running on windows -->
                                            <arg value="${resourcehacker.installdir}\ResHacker.exe"/>
                                            <arg value="-addoverwrite"/>
                                            <arg value="${project.build.directory}/${brandingToken}/bin/${brandingToken}.exe,"/>
                                            <arg value="${project.build.directory}/${brandingToken}/bin/${brandingToken}.exe,"/>
                                            <arg value="${application.ico},"/>
                                            <arg value="ICONGROUP,"/>
                                            <arg value="MAINICON,"/>
                                            <arg value="0"/>
                                        </exec>      
                     
                                        <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}.zip" update="true"> 
                                            <zipfileset dir="${project.build.directory}/${brandingToken}/bin" includes="*.exe" prefix="${brandingToken}/bin" /> 
                                        </zip>            
                                    </target>       
                                </configuration>                      
                            </execution>
                        </executions>
                    </plugin>  
                </plugins>
            </build>
        </profile>                    
        <profile>
            <id>replace-icon-windows</id>
            <activation>
                <os>
                    <family>Windows</family>
                </os>
                <file>
                    <exists>${resourcehacker.installdir}\ResHacker.exe</exists>
                </file>                            
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId> 
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>                        
                                <configuration>
                                    <target> 

                                        <echo message ="Replacing icon of Windows launcher executable" /> 
                                        <!-- replace executable with ResHacker.exe path on windows -->
                                        <exec executable="${resourcehacker.installdir}\ResHacker.exe" resolveexecutable="true" logerror="true">
                                            <arg value="-addoverwrite"/>
                                            <arg value="${project.build.directory}/${brandingToken}/bin/${brandingToken}.exe,"/>
                                            <arg value="${project.build.directory}/${brandingToken}/bin/${brandingToken}.exe,"/>
                                            <arg value="${application.ico},"/>
                                            <arg value="ICONGROUP,"/>
                                            <arg value="MAINICON,"/>
                                            <arg value="0"/>
                                        </exec>      
                     
                                        <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}.zip" update="true"> 
                                            <zipfileset dir="${project.build.directory}/${brandingToken}/bin" includes="*.exe" prefix="${brandingToken}/bin" /> 
                                        </zip>            
                                    </target>       
                                </configuration>                      
                            </execution>
                        </executions>
                    </plugin>                       
                </plugins>                  
            </build>
        </profile>