Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wo soll ich Installationsressourcen (WXS-Datei, DMG-Skript, Symbol) ablegen und wie Maven Antrun konfiguriert wird, wenn eine eigenständige App bereitgestellt wird

Nach so vielen Versuchen habe ich endlich mein Problem gelöst und um anderen zu helfen, poste ich hier die Lösung.

Die Projektstruktur sollte so aussehen

und pom.xml sollte so aussehen

<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}/deploy</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>

Jetzt erkläre ich dir meinen Fehler. Schauen Sie sich den Build-Teil von Question genau an. Im Ant-Run-Plugin, wenn wir in die fx:deploy-Aufgabe gehen, finden Sie hier, dass ich den Klassenpfad eingetragen habe. Ich habe diesen Teil vermasselt, der so einfach war. schau jetzt in mein Pom hier. Klassenpfad jetzt aktualisiert. Zuerst erwähne ich das Basisverzeichnis, dann den Ant-fx-plugin-Pfad und dann den jfxrt.jar-Pfad. jfxrt ist möglicherweise nicht erforderlich. Danach habe ich den Abschnitt Abhängigkeiten des Plugins entfernt. das ist kritisch. Wenn ich diesen Abschnitt nicht entferne, schaut mein Antrun-Plugin immer in die von Maven bereitgestellten Abhängigkeiten, aber nicht in Ant-Classpath. in der Ameisen-Klassenpfad-Reihenfolge ist sehr, sehr wichtig. Ihr basedir muss immer vor ant-run.jar kommen. das ist es

Ich hoffe, dies wird für die Personen hilfreich sein, die mit diesem Problem konfrontiert werden.