Frage Wie verwende ich das Spring Boot Build Plugin mit der JavaFX App?


Ich habe NetBeans verwendet, um eine Vorlage für meine JavaFX-App zu generieren. Es erzeugte eine POM.xml und der Build-Abschnitt scheint übermäßig kompliziert. Außerdem entpackt es jedes Mal alle Abhängigkeiten, wenn ich das Projekt kompiliere, und es dauert jedes Mal 3 Minuten. Hier ist der relevante Abschnitt der Datei POM.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
</parent>

<organization>
    <name>MDenis</name>
</organization>

<dependencies>

    <!--SPRING-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
    <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>

    <!--HIBERNATE-->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.10.Final</version>
    </dependency>

    <!--HSQLDB-->
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
    </dependency>

    <!--LOMBOK-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <!--LOG4J2-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <excludeScope>system</excludeScope>
                        <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
                        <outputDirectory>${project.build.directory}/classes</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>

                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>${java.home}/../bin/javapackager</executable>
                        <arguments>
                            <argument>-createjar</argument>
                            <argument>-nocss2bin</argument>
                            <argument>-appclass</argument>
                            <argument>${mainClass}</argument>
                            <argument>-srcdir</argument>
                            <argument>${project.build.directory}/classes</argument>
                            <argument>-outdir</argument>
                            <argument>${project.build.directory}</argument>
                            <argument>-outfile</argument>
                            <argument>${project.build.finalName}.jar</argument>
                        </arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>default-cli</id>
                    <goals>
                        <goal>exec</goal>                            
                    </goals>
                    <configuration>
                        <executable>${java.home}/bin/java</executable>
                        <commandlineArgs>${runfx.args}</commandlineArgs>
                    </configuration>
                </execution>
            </executions>  
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration>
                <additionalClasspathElements>
                    <additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
                </additionalClasspathElements>
            </configuration>
        </plugin>
    </plugins>
</build>

Dies ist mein erstes JavaFX-Projekt, in meinen anderen Projekten verwende ich einfach diesen Build-Abschnitt und alles funktioniert gut:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Bei dem Versuch, es mit diesem Projekt zu verwenden, erhalte ich den folgenden Fehler:

The parameters 'executable' for goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec are missing or invalid

Warum funktioniert das nicht mit einem JavaFX-Projekt? Es scheint, als ob es Ziele ausführen möchte, die nicht einmal in meiner POM-Datei enthalten sind.

BEARBEITEN

Ich sehe dieses Ziel in der effektiven POM-Registerkarte, aber ich weiß nicht genug über Maven, um einen Sinn daraus zu machen, ich kann sowieso nichts in der effektiven Sektion ändern. Weiß jemand, wie man das Spring Boot Plugin mit einer JavaFX Desktop App arbeiten lässt?

Jede Hilfe wäre willkommen.

Vielen Dank!


7
2017-08-31 18:08


Ursprung


Antworten:


Sie müssen die Pom-Datei umgestalten. Die Konfiguration muss wie folgt von den Ausführungen abweichen:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>unpack-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>exec</goal>
      </goals>
          <configuration>
            <executable>${java.home}/../bin/javapackager</executable>
              <arguments>
                <argument>-createjar</argument>
                <argument>-nocss2bin</argument>
                <argument>-appclass</argument>
                <argument>${mainClass}</argument>
                <argument>-srcdir</argument>
                <argument>${project.build.directory}/classes</argument>
                <argument>-outdir</argument>
                <argument>${project.build.directory}</argument>
                <argument>-outfile</argument>
                <argument>${project.build.finalName}.jar</argument>
              </arguments>
            </configuration>
          </execution>
        <execution>
          <id>default-cli</id>
          <goals>
            <goal>exec</goal>                            
          </goals>
        </execution>
      </executions>  
    <configuration>
      <executable>${java.home}/bin/java</executable>
      <commandlineArgs>${runfx.args}</commandlineArgs>
    </configuration>
</plugin>

3
2017-09-05 15:14



Ich habe es schließlich geschafft, das zu machen, ohne die Abhängigkeiten bei jedem Kompilieren zu entpacken. Ich habe das benutzt de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport Klasse, um meine Hauptklasse zu erweitern, setzen launch(args); in der Hauptmethode, und ich habe jetzt den folgenden Code im Build-Abschnitt der POM.XML-Datei:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
            </executions>  
            <configuration>
                <executable>${java.home}/bin/java</executable>
                <commandlineArgs>${runfx.args}</commandlineArgs>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3
2017-09-09 11:26