
колледже Доусон в Монреале, Канада. Он также является программным консультантом и по совместительству преподавателем в Школе расширенного обучения при Институте вычислительной техники Университета Конкордия . Он ведет блог на omniprogrammer.com и пишет в Твиттере @omniprof . Его регулярные колонки о NetBeans в образовании перечислены здесь .
… и на работе!
В продолжение второй части этой следующей статьи о Maven в классе мы продолжим рассмотрение файла pom.xml, который был создан NetBeans при выборе приложения Maven JavaFX. В прошлой статье мы увидели, что проект был организован в папки по Maven, а не по NetBeans. Образцы пакетов и файлов были созданы. Откуда они пришли?
Maven проекты могут быть определены шаблонами. Они называются архетипами. Эти шаблоны могут определять файл pom, структуру каталогов и примеры файлов. Вы можете получить доступ к архетипам, включенным в NetBeans, выбрав Новый проект | Maven | Проект от Архетипа.
Существует множество архетипов, включенных в NetBeans. Я просто хочу взглянуть на те из них для JavaFX, поэтому я использовал поле поиска и ввел JavaFX.
Выделенный архетип на изображении — «javafx». Именно этот архетип используется NetBeans при создании приложения JavaFX Maven. Я надеюсь узнать, как создавать архетипы, чтобы у моих учеников был модифицированный пом, который я представлю в следующей статье как часть пользовательского архетипа.
Вернуться к pom.xml
В pom-файле следующий раздел принадлежит тегу build. Сборка — это то, где плагины объявлены. Плагины — это модули, которые могут быть вызваны для выполнения определенного действия во время сборки проекта. В разделе сборки pom определены четыре плагина, и они вложены в тег плагина. Первый — это плагин зависимости.
<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>
Зависимости — это библиотечные файлы, которые необходимы для компиляции, выполнения и упаковки проекта. Плагин maven-dependency-plugin управляет этими зависимостями. Что интересно в присутствии этого плагина, так это то, что в этом pom не определены зависимости. Похоже, что здесь, на всякий случай.
Этот плагин используется для помещения необходимых файлов зависимостей в папку с именем classes. Эти файлы будут поступать из локального хранилища. Позже в pom, когда проект упакован, все эти файлы будут частью JAR, который создает сборка. Это действие произойдет на этапе сборки пакета при создании файла JAR. Я объясню фазы в следующей статье.
Есть два тега исключения. Первый, excludeScope, предотвращает добавление системных файлов Java в проект. Следующее исключение, excludeGroupIds, перечисляет три идентификатора известных библиотек, используемых для модульного тестирования приложения. Они не должны быть включены в исполняемый JAR, который будет создан, поэтому они перечислены здесь.
Последний пункт, который нужно указать. Переменная $ {project.build.directory} определяется Maven. Существует ряд этих переменных, которые определяет Maven, и значения NetBeans, а также другие среды IDE.
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions>
Плагин exec-maven-plugin отвечает за выполнение программ во время сборки, обычно за выполнение самого проекта. Этот плагин выполняет две программы.
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${java.home}/../bin/javafxpackager</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>
Этот первый раздел выполнения использует внешнюю программу javafxpackager для создания исполняемого файла JAR. До Java 8 это был необходимый инструмент для такой задачи. Аргументы используют переменные Maven для информирования инструмента, где он может найти нужные ему файлы и информацию, необходимую для создания JAR. Аргумент –noocss2bin указывает, что таблицы стилей CSS не будут храниться в JAR как двоичные файлы. Они останутся в виде текстовых файлов. Теперь вы можете понять, почему плагин зависимостей поместил все зависимости в папку классов. Это где javafxpackager найдет затем включить в банку.
<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>
Второй раздел выполнения отвечает за запуск проекта. Он делает это так, как будто он запускается из командной строки. Это приведет к тому, что в системе будет запущен новый экземпляр JVM, а затем будет запущен JAR. CommandLineArgs $ {runfx.args} не является переменной Maven. Он определяется NetBeans и, к сожалению, делает этот pom-файл непереносимым и, следовательно, непригодным для использования в других IDE.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<bootclasspath>
${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar
</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
Плагин maven-compiler-plugin позволяет вам определить, какую версию Java использовать для компилятора (источник) и с какой JVM должны быть совместимы файлы классов (цель). В Java 7 библиотека JavaFX, jfxrt.jar, не была частью стандартного пути к классам. Загрузочный путь добавляет библиотеку к пути, чтобы компилятор имел к ней доступ.
<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>
Maven-surefire-plugin отвечает за выполнение модульных тестов. Чтобы это работало, должна быть зависимость от библиотеки JUnit, которой нет в этом файле pom. JUnit сообщает об успехах и неудачах модульных тестов. Этот плагин запишет результаты в текстовый и XML-файл. Если вам нужен дополнительный pizazz, есть дополнительный плагин, который может выводить результаты в HTML.
Теперь у вас есть представление о том, что делает этот файл pom и как он это делает. В моей следующей статье я представлю файл pom для замены, который можно использовать только с Java 8, но переносим на другие IDE. Плюс, у него будут зависимости!