Где я должен поставить ресурсы установщика (файл wxs, dmg- script, значок) и как настроить maven antrun при развертывании автономного приложения

Где я должен удалить свой настраиваемый конфигурационный файл установщика WIX и как настроить инструмент javafx packger в проекте java fx на основе maven, используя antrun-плагин? Я успешно сделал базовый установщик MSI, используя ресурс пакета по умолчанию, и он работает нормально. Теперь я настроил файлы установщиков WXS, поскольку в основе fxpackager лежит набор инструментов wix при создании MSI.

используя эту настройку установщика MSI и Как настроить пользовательский значок для значка javafx для собственного пакета в Windows Мне удалось добавить Icon. но задача развертывания не выбирает пользовательский файл конфигурации i.e WXS

Я также прочитал официальное руководство http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html

моя структура проекта выглядит следующим образом

project structure

Вы можете видеть, что я добавил в обоих местах i.e под java-client/package/windows/. и я также добавил в src/main/deploy/package/windows/. как упоминалось по связанным вопросам. но оба способа не работают с моим плагином maven ant. мой разум взрывается.

Из документации Oracle они заявляют "Инструменты упаковки ищут настраиваемые ресурсы в пути класса, прежде чем возвращаться к встроенным ресурсам. У Java Packager есть"." (текущий рабочий каталог) по умолчанию добавлен в путь к классу. Поэтому, чтобы заменить значок приложения, скопируйте свой значок в. /package/macosx/DemoApp.icns в каталог, из которого запускается javapackager (обычно это каталог корневого проекта).

Я также попытался добавить ${basedir} в ant class-path посмотреть в моей сборной части pom

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <includes>
                    <include>**/*Test.class</include>
                </includes>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>default-jar</id>
                    <phase>none</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>create-temp-jar</id>
                    <phase>prepare-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="maven.plugin.classpath" />

                            <fx:jar
                                destfile="${project.build.directory}/${project.build.finalName}-temp">
                                <fx:application id="fxApp" name="${project.name}"
                                    mainClass="${exec.mainClass}" />
                                <fx:fileset dir="${project.build.directory}/classes" />
                                <manifest>
                                    <attribute name="Implementation-Vendor" value="${app.vendor}" />
                                    <attribute name="Implementation-Title" value="${app.name}" />
                                    <attribute name="Implementation-Version" value="1.0" />
                                </manifest>
                            </fx:jar>
                            <attachartifact
                                file="${project.build.directory}/${project.build.finalName}-temp.jar"
                                classifier="temp" />
                        </target>
                    </configuration>
                </execution>
                <execution>
                    <id>create-deployment-bundle</id>
                    <phase>install</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target xmlns:fx="javafx:com.sun.javafx.tools.ant">
                            <property name="windows.basedir" value="${basedir}/src/main/deploy/package/windows" />
                            <property name="mac.basedir" value="${basedir}/package/macosx" />
                            <property name="my.basedir" value="${basedir}" />
                            <taskdef uri="javafx:com.sun.javafx.tools.ant" resource="com/sun/javafx/tools/ant/antlib.xml"
                                classpath="${my.basedir}:${windows.basedir}:${mac.basedir}" />

                            <fx:deploy nativeBundles="msi" width="600" height="400"
                                outdir="${dist.dir}" embedJNLP="true" outfile="${project.build.finalName}"
                                verbose="true">
                                <fx:application name="${project.build.finalName}"
                                    mainClass="${exec.mainClass}" />
                                <fx:preferences shortcut="true" menu="true"
                                    install="true" />
                                <fx:resources>
                                    <fx:fileset dir="${project.build.directory}"
                                        includes="${project.build.finalName}.jar" />
                                </fx:resources>
                                <fx:info title="${application.title}" vendor="${application.vendor}"
                                    copyright="${application.copyright}" description="Test built from Java executable jar">
                                    <fx:icon
                                        href="${basedir}/src/main/deploy/package/windows/${project.build.finalName}.ico" />
                                </fx:info>
                                <fx:platform javafx="${javafx.version}">
                                    <fx:jvmarg value="-Xms512m" />
                                    <fx:jvmarg value="-Xmx1024m" />
                                </fx:platform>
                                <fx:permissions elevated="true" />
                            </fx:deploy>
                        </target>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>com.oracle</groupId>
                    <artifactId>ant-javafx</artifactId>
                    <version>${javafx.version}</version>
                    <systemPath>${javafx.tools.ant.jar}</systemPath>
                    <scope>system</scope>
                </dependency>
                <dependency>
                    <groupId>com.oracle</groupId>
                    <artifactId>javafx</artifactId>
                    <version>${javafx.version}</version>
                    <systemPath>${fx.home}</systemPath>
                    <scope>system</scope>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
                </descriptors>
                <finalName>${project.build.finalName}</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifestEntries>
                        <JavaFX-Version>${javafx.version}</JavaFX-Version>
                        <JavaFX-Application-Class>${exec.mainClass}</JavaFX-Application-Class>
                        <Main-Class>com/javafx/main/Main</Main-Class>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Можете ли вы, пожалуйста, помогите мне разобраться с проблом.

Ответы

Ответ 1

После того, как многие попытки, наконец, я решил проблему и помог другим, я размещаю здесь решение.

Структура проекта должна быть такой

enter image description here

и pom.xml должны быть похожи на

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.client</groupId>
<artifactId>JavaClient</artifactId>
<version>5.2.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JavaClient</name>

<properties>
    <exec.mainClass>com.client.MainApp</exec.mainClass>
    <javafx.version>2.2.67</javafx.version>
    <fx.home>${java.home}/lib/jfxrt.jar</fx.home>
    <javafx.tools.ant.jar>${java.home}/../lib/ant-javafx.jar</javafx.tools.ant.jar>
    <javafx-dialogs.jar>${project.basedir}/lib/javafx-dialogs-0.0.1.jar</javafx-dialogs.jar>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dist.dir>${project.build.directory}/diploy</dist.dir>
    <base.dir>${project.basedir}</base.dir>
</properties>

<dependencies>
    <dependency>
        <groupId>org.oracle</groupId>
        <artifactId>javafx</artifactId>
        <version>${javafx.version}</version>
        <systemPath>${fx.home}</systemPath>
        <scope>system</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>xmlpull</groupId>
        <artifactId>xmlpull</artifactId>
        <version>1.1.3.1</version>
    </dependency>

    <dependency>
        <groupId>xpp3</groupId>
        <artifactId>xpp3_min</artifactId>
        <version>1.1.4c</version>
    </dependency>

    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.7</version>
    </dependency>

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>javafx-dialogs</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${javafx-dialogs.jar}</systemPath>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0.2</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <includes>
                    <include>**/*Test.class</include>
                </includes>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>create-temp-jar</id>
                    <phase>prepare-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="${project.basedir}:${javafx.tools.ant.jar}:${fx.home}" />

                            <fx:jar
                                destfile="${project.build.directory}/${project.build.finalName}-temp">
                                <fx:application id="fxApp" name="${project.name}"
                                    mainClass="${exec.mainClass}" />
                                <fx:fileset dir="${project.build.directory}/classes" />
                                <manifest>
                                    <attribute name="Implementation-Vendor" value="${app.vendor}" />
                                    <attribute name="Implementation-Title" value="${app.name}" />
                                    <attribute name="Implementation-Version" value="1.0" />
                                </manifest>
                            </fx:jar>
                            <attachartifact
                                file="${project.build.directory}/${project.build.finalName}-temp.jar"
                                classifier="temp" />
                        </target>
                    </configuration>
                </execution>
                <execution>
                    <id>create-deployment-bundle</id>
                    <phase>install</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="${project.basedir}:${javafx.tools.ant.jar}:${fx.home}" />

                            <fx:deploy nativeBundles="all" width="100" height="100"
                                outdir="${dist.dir}" embedJNLP="true" outfile="${project.build.finalName}"
                                verbose="true">

                                <fx:application name="${project.build.finalName}"
                                    mainClass="${exec.mainClass}" />
                                <fx:resources>
                                    <fx:fileset dir="${project.build.directory}" includes="${project.build.finalName}.jar" />
                                </fx:resources>
                                <fx:info title="${project.build.finalName}" vendor="NUAXIS"
                                    description="Test built from Java executable jar" />

                                <fx:permissions elevated="true" />
                            </fx:deploy>
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
                </descriptors>
                <finalName>${project.build.finalName}</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifestEntries>
                        <JavaFX-Version>${javafx.version}</JavaFX-Version>
                        <JavaFX-Application-Class>${exec.mainClass}</JavaFX-Application-Class>
                        <Main-Class>com/javafx/main/Main</Main-Class>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

Теперь я объясню вам свою ошибку. внимательно посмотрите на часть сборки Вопроса. в плагине ant -run, когда мы заходим в fx: deploy task здесь, вы обнаружите, что у меня есть запись класса-пути. Я перепутал эту часть, которая была настолько простой. посмотри сейчас на моего Пома. путь класса теперь обновлен. сначала я упоминаю базовый dir, затем ant -fx-plugin path, а затем jfxrt.jar path. jfxrt может быть необязательным. после этого я удалил раздел зависимостей плагина. это важно. если я не удаляю этот раздел, то мой плагин antrun alwasy смотрит на maven при условии зависимостей, но не в ant -classpath. в порядке ant -classpath очень важно. ваш basedir всегда должен быть до ant -run.jar. thats it

Надежда Это поможет людям, которые столкнутся с этой проблемой.