колледже Доусон в Монреале, Канада. Он также является программным консультантом и по совместительству преподавателем в Школе расширенного обучения при Институте вычислительной техники Университета Конкордия . Он ведет блог на 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. Плюс, у него будут зависимости!