Как использовать плагин сборки Spring Boot с приложением JavaFX - PullRequest
0 голосов
/ 31 августа 2018

Я использовал Netbeans для создания шаблона для моего приложения JavaFX. Он сгенерировал POM.xml, и раздел сборки кажется чрезмерно сложным. Кроме того, он распаковывает ВСЕ зависимости каждый раз, когда я компилирую проект, и это занимает около 3 минут каждый раз. Вот соответствующий раздел файла 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>

Это мой первый проект JavaFX, в других моих проектах я просто использую этот раздел сборки, и все отлично работает:

<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>

Однако при попытке использовать его в этом проекте я получаю следующую ошибку:

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

Почему это не будет работать с проектом JavaFX? Кажется, он хочет выполнить цели, которых нет даже в моем файле POM.

EDIT

Я вижу эту цель во вкладке «Эффективное POM», но я недостаточно знаю о Maven, чтобы понять ее, так или иначе, я ничего не могу изменить в эффективном разделе. Кто-нибудь знает, как заставить плагин Spring Boot работать с настольным приложением JavaFX?

Буду признателен за любую помощь.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Мне, наконец, удалось сделать эту работу, не распаковывая зависимости каждый раз, когда я компилирую. Я использовал класс de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport для расширения моего основного класса, поместил launch(args); в метод main, и теперь у меня есть следующий код в разделе сборки файла POM.XML:

<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>
0 голосов
/ 05 сентября 2018

Вам необходимо провести рефакторинг pom-файла. Конфигурация должна выходить за пределы выполнения, например:

<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>
...