Basic Java Tools for Building & Testing Apps
Скачать 4.76 Mb.
|
doFirst или doLast тех задач, которые фактически выполняются. Gradle — управление зависимостями Скрипт сборки Gradle определяет процесс сборки проектов; каждый проект содержит некоторые зависимости и некоторые публикации. Зависимости означают вещи, которые поддерживают создание вашего проекта, такие как требуемый файл JAR из других проектов и внешние JAR, такие как JDBC JAR или Eh-cache JAR в пути к классам. Публикации означают результаты проекта, такие как файлы тестовых классов и файлы сборки, такие как файлы war. Все большинство всех проектов не являются самостоятельными. Им нужны файлы, созданные другими проектами для компиляции и тестирования исходных файлов. Например, чтобы использовать Hibernate в проекте, вам нужно включить некоторые JAR-файлы Hibernate в classpath. Gradle использует специальный скрипт для определения зависимостей, которые необходимо загрузить. Gradle позаботится о создании и публикации результатов где-нибудь. Публикация основана на задаче, которую вы определяете. Возможно, вы захотите скопировать файлы в локальный каталог или загрузить их в удаленный репозиторий Maven или lvy, или вы можете использовать файлы из другого проекта в той же многопроектной сборке. Мы можем назвать процесс публикации задачи публикацией. Объявление ваших зависимостей Конфигурация зависимостей — это не что иное, как набор множеств зависимостей. Вы можете использовать эту функцию для объявления внешних зависимостей средствами, которые вы хотите загрузить из Интернета. Это определяет различные стандарты, такие как следующие. apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+' } Конфигурации зависимостей Конфигурация зависимостей — это не что иное, как набор зависимостей. Вы можете использовать эту функцию для объявления внешних зависимостей, которые вы хотите загрузить из Интернета. Это определяет следующие различные стандартные конфигурации. Компилировать — зависимости, необходимые для компиляции производственного источника проекта. Runtime — зависимости, необходимые производственным классам во время выполнения. По умолчанию также включает зависимости времени компиляции. Тестовая компиляция — зависимости, необходимые для компиляции исходного кода проекта. По умолчанию он включает скомпилированные производственные классы и зависимости времени компиляции. Test Runtime — зависимости, необходимые для запуска тестов. По умолчанию он включает зависимости времени выполнения и тестовой компиляции. Компилировать — зависимости, необходимые для компиляции производственного источника проекта. Runtime — зависимости, необходимые производственным классам во время выполнения. По умолчанию также включает зависимости времени компиляции. Тестовая компиляция — зависимости, необходимые для компиляции исходного кода проекта. По умолчанию он включает скомпилированные производственные классы и зависимости времени компиляции. Test Runtime — зависимости, необходимые для запуска тестов. По умолчанию он включает зависимости времени выполнения и тестовой компиляции. Внешние зависимости Внешние зависимости относятся к типу зависимостей. Это зависимость от некоторых файлов, созданных вне текущей сборки и хранящихся в каком-либо репозитории, таком как Maven central, или в корпоративном репозитории Maven или lvy, или в каталоге в локальной файловой системе. Следующий фрагмент кода предназначен для определения внешней зависимости. Используйте этот код в файле build.gradle . dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' } Внешняя зависимость объявляет внешние зависимости, а форма ярлыка выглядит как «группа: имя: версия». Хранилища При добавлении внешних зависимостей. Gradle ищет их в хранилище. Репозиторий — это просто набор файлов, упорядоченный по группам, именам и версиям. По умолчанию Gradle не определяет никаких репозиториев. Мы должны определить хотя бы одно хранилище явно. Следующий фрагмент кода определяет, как определить хранилище maven. Используйте этот код в файле build.gradle . repositories { mavenCentral() } Следующий код предназначен для определения удаленного Maven. Используйте этот код в файле build.gradle . repositories { maven { url "http://repo.mycompany.com/maven2" } } Издательские артефакты Конфигурации зависимостей также используются для публикации файлов. Эти опубликованные файлы называются артефактами. Обычно мы используем плагины для определения артефактов. Тем не менее, вам нужно указать Gradle, где публиковать артефакты. Вы можете достичь этого, прикрепив репозитории к задаче загрузки архивов. Взгляните на следующий синтаксис публикации репозитория Maven. При выполнении Gradle создаст и загрузит Pom.xml в соответствии с требованиями проекта. Используйте этот код в файле build.gradle . apply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: "file://localhost/tmp/myRepo/") } } } Gradle — Плагины Плагин — это не что иное, как набор задач, почти все полезные задачи, такие как компиляция задач, настройка объектов домена, настройка исходных файлов и т. Д., Выполняются плагинами. Применение плагина к проекту означает, что он позволяет расширять возможности проекта. Плагины могут делать такие вещи, как — Расширьте базовую модель Gradle (например, добавьте новые элементы DSL, которые можно настроить). Настройте проект в соответствии с преобразованиями (например, добавьте новые задачи или настройте разумные значения по умолчанию). Применить конкретную конфигурацию (например, добавить организационные репозитории или обеспечить соблюдение стандартов). Типы плагинов В Gradle есть два типа плагинов: плагины для скриптов и бинарные плагины. Плагины скриптов — это дополнительный скрипт сборки, который дает декларативный подход к манипулированию сборкой. Обычно это используется в сборке. Бинарные плагины — это классы, которые реализуют интерфейс плагина и применяют программный подход к управлению сборкой. Бинарные плагины могут находиться со скриптом сборки, с иерархией проекта или внешне в JAR плагина. Применение плагинов Метод API Project.apply () используется для применения определенного плагина. Вы можете использовать один и тот же плагин несколько раз. Существует два типа плагинов: один — плагин скрипта, а второй — бинарный плагин. Скриптовые плагины Плагины сценариев могут быть применены из сценария в локальной файловой системе или в удаленном месте. Расположение файловой системы относится к каталогу проекта, в то время как расположение удаленного сценария указывает URL-адрес HTTP. Взгляните на следующий фрагмент кода. Он используется для применения плагина other.gradle к сценарию сборки. Используйте этот код в файле build.gradle . apply from: 'other.gradle' Бинарные плагины Каждый плагин идентифицируется по идентификатору плагина, так как некоторые основные плагины используют короткие имена для его применения, а некоторые плагины сообщества используют полное имя для идентификатора плагина. Некоторое время это позволяет указать класс плагина. Взгляните на следующий фрагмент кода. Он показывает, как применить плагин Java, используя его тип. Используйте этот код в файле build.gradle . apply plugin: JavaPlugin Посмотрите на следующий код для применения основного плагина, используя короткое имя. Используйте этот код в файле build.gradle . plugins { id 'java' } Взгляните на следующий код для применения плагина сообщества с использованием короткого имени. Используйте этот код в файле build.gradle . plugins { id "com.jfrog.bintray" version "0.4.1" } Написание пользовательских плагинов При создании пользовательского плагина вам необходимо написать реализацию плагина. Gradle создает плагин и вызывает экземпляр плагина с помощью метода Plugin.apply (). Следующий пример содержит плагин приветствия, который добавляет задачу приветствия в проект. Посмотрите на следующий код. Используйте этот код в файле build.gradle . apply plugin: GreetingPlugin class GreetingPlugin implements Plugin { void apply(Project project) { project.task('hello') << { println "Hello from the GreetingPlugin" } } } Используйте следующий код для выполнения вышеуказанного сценария. C:\> gradle -q hello Выход: Hello from the GreetingPlugin Получение информации от сборки Большинству плагинов требуется поддержка конфигурации из скрипта сборки. У проекта Gradle есть связанный объект ExtensionContainer, который помогает отслеживать все настройки и свойства, передаваемые плагинам. Давайте добавим простой объект расширения в проект. Здесь мы добавляем объект расширения приветствия в проект, который позволяет настроить приветствие. Используйте этот код в файле build.gradle . apply plugin: GreetingPlugin greeting.message = 'Hi from Gradle' class GreetingPlugin implements Plugin { void apply(Project project) { // Add the 'greeting' extension object project.extensions.create("greeting", GreetingPluginExtension) // Add a task that uses the configuration project.task('hello') << { println project.greeting.message } } } class GreetingPluginExtension { def String message = 'Hello from GreetingPlugin' } Используйте следующий код для выполнения вышеуказанного сценария. C:\> gradle -q hello Выход: Hi from Gradle В этом примере GreetingPlugin — это простой старый объект Groovy с полем с именем message. Объект расширения добавляется в список плагинов с именем приветствия. Затем этот объект становится доступным как свойство проекта с тем же именем, что и у объекта расширения. Gradle добавляет закрытие конфигурации для каждого объекта расширения, поэтому вы можете сгруппировать настройки вместе. Посмотрите на следующий код. Используйте этот код в файле build.gradle . apply plugin: GreetingPlugin greeting { message = 'Hi' greeter = 'Gradle' } class GreetingPlugin implements Plugin { void apply(Project project) { project.extensions.create("greeting", GreetingPluginExtension) project.task('hello') << { println "${project.greeting.message} from ${project.greeting.greeter}" } } } class GreetingPluginExtension { String message String greeter } Используйте следующий код для выполнения вышеуказанного сценария. C:\> gradle -q hello Выход: Hello from Gradle Стандартные плагины Gradle Существуют различные плагины, которые включены в дистрибутив Gradle. Языковые плагины Эти плагины добавляют поддержку различных языков, которые могут быть скомпилированы и выполнены в JVM. Идентификатор плагина Автоматически применяется Описание Джава Java-база Добавляет в проект возможности компиляции, тестирования и связывания Java. Он служит основой для многих других плагинов Gradle. заводной Java, заводная база Добавлена поддержка построения Groovy проектов. Скала Java, Scala-база Добавлена поддержка для построения проектов Scala. ANTLR Джава Добавлена поддержка генерации парсеров с использованием Antlr. Инкубация языковых плагинов Эти плагины добавляют поддержку различных языков. Идентификатор плагина Автоматически применяется Описание ассемблер — Добавляет возможности родного языка ассемблера в проект. с — Добавляет возможности компиляции исходного кода C в проект. CPP — Добавляет возможности компиляции исходного кода C ++ в проект. Objective-C — Добавляет возможности компиляции исходного кода Objective-C в проект. Цель-каст — Добавляет в проект возможности компиляции исходного кода Objective-C ++. окна-ресурсы — Добавлена поддержка включения ресурсов Windows в собственные двоичные файлы. Gradle — Запуск сборки Gradle предоставляет командную строку для выполнения сценария сборки. Он может выполнять более одной задачи одновременно. В этой главе объясняется, как выполнять несколько задач с использованием разных параметров. Выполнение нескольких задач Вы можете выполнить несколько задач из одного файла сборки. Gradle может обработать этот файл сборки с помощью команды gradle . Эта команда скомпилирует каждую задачу в порядке их перечисления и выполнит каждую задачу вместе с зависимостями, используя различные параметры. Пример — есть четыре задачи — задача1, задача2, задача3 и задача4. Задача 3 и задача 4 зависят от задачи 1 и задачи 2. Посмотрите на следующую диаграмму. В приведенном выше 4 задачи зависят друг от друга и представлены символом стрелки. Посмотрите на следующий код. Копировать можно вставить в файл build.gradle . task task1 << { println 'compiling source' } task task2(dependsOn: task1) << { println 'compiling unit tests' } task task3(dependsOn: [task1, task2]) << { println 'running unit tests' } task task4(dependsOn: [task1, task3]) << { println 'building the distribution' } Вы можете использовать следующий код для компиляции и выполнения вышеуказанной задачи. C:\> gradle task4 test Выход: :task1 compiling source :task2 compiling unit tests :task3 running unit tests :task4 building the distribution BUILD SUCCESSFUL Total time: 1 secs Исключая задачи При исключении задачи из выполнения вы можете использовать опцию –x вместе с командой gradle и указать имя задачи, которое вы хотите исключить. Используйте следующую команду, чтобы исключить task4 из приведенного выше сценария. C:\> gradle task4 -x test Выход: :task1 compiling source :task4 building the distribution BUILD SUCCESSFUL Total time: 1 secs Продолжение сборки, когда происходит сбой Gradle прервет выполнение и завершит сборку сразу после сбоя любой задачи. Вы можете продолжить выполнение даже в случае сбоя. Для этого вы должны использовать опцию –continue с командой gradle. Он обрабатывает каждую задачу отдельно вместе с их зависимостями. И главное — он будет отлавливать каждую обнаруженную ошибку и сообщать об окончании сборки. Предположим, что если задача не выполнена, то последующие зависимые задачи также не будут выполнены. Выбор сборки для выполнения Когда вы запускаете команду gradle, она ищет файл сборки в текущем каталоге. Вы можете использовать опцию –b, чтобы выбрать конкретный файл сборки вместе с абсолютным путем. В следующем примере выбирается проект hello из файла myproject.gradle, который находится в подкаталоге / посмотрите на него. task hello << { println "using build file '$buildFile.name' in '$buildFile.parentFile.name'." } Вы можете использовать следующую команду для выполнения вышеуказанного скрипта. C:\> gradle -q -b subdir/myproject.gradle hello Выход: using build file 'myproject.gradle' in 'subdir'. Получение информации о сборке Gradle предоставляет несколько встроенных задач для получения подробной информации о задаче и проекте. Это может быть полезно для понимания структуры и зависимостей вашей сборки и для устранения проблем. Вы можете использовать плагин отчетов проекта, чтобы добавить задачи в ваш проект, который будет генерировать эти отчеты. Листинг проектов Вы можете перечислить иерархию проектов выбранного проекта и его подпроектов с помощью команды gradle –q projects . Вот пример, используйте следующую команду, чтобы получить список всех проектов в файле сборки. C:\> gradle -q projects Выход: ------------------------------------------------------------ Root project ------------------------------------------------------------ Root project 'projectReports' +--- Project ':api' - The shared API for the application \--- Project ':webapp' - The Web application implementation To see a list of the tasks of a project, run gradle :tasks For example, try running gradle :api:tasks Отчет показывает описание каждого проекта, если он указан. Вы можете использовать следующую команду, чтобы указать описание. Вставьте его в файл build.gradle . description = 'The shared API for the application' Листинг Задачи Вы можете перечислить все задачи, которые принадлежат нескольким проектам, используя следующую команду. C:\> gradle -q tasks Выход: ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Default tasks: dists Build tasks ----------- clean - Deletes the build directory (build) dists - Builds the distribution libs - Builds the JAR Build Setup tasks ----------------- init - Initializes a new Gradle build. [incubating] wrapper - Generates Gradle wrapper files. [incubating] Help tasks ---------- buildEnvironment - Displays all buildscript dependencies declared in root project 'projectR eports'. components - Displays the components produced by root project 'projectReports'. [incubating ] dependencies - Displays all dependencies declared in root project 'projectReports'. dependencyInsight - Displays the insight into a specific dependency in root project 'projec tReports'. help - Displays a help message. model - Displays the configuration model of root project 'projectReports'. [incubating] projects - Displays the sub-projects of root project 'projectReports'. properties - Displays the properties of root project 'projectReports'. tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects). To see all tasks and more detail, run gradle tasks --all To see more detail about a task, run gradle help --task Вы можете использовать следующую команду для отображения информации обо всех задачах. C:\> gradle -q tasks --all Выход: ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Default tasks: dists Build tasks ----------- clean - Deletes the build directory (build) api:clean - Deletes the build directory (build) webapp:clean - Deletes the build directory (build) dists - Builds the distribution [api:libs, webapp:libs] docs - Builds the documentation api:libs - Builds the JAR api:compile - Compiles the source files webapp:libs - Builds the JAR [api:libs] webapp:compile - Compiles the source files Build Setup tasks ----------------- init - Initializes a new Gradle build. [incubating] wrapper - Generates Gradle wrapper files. [incubating] Help tasks ---------- buildEnvironment - Displays all buildscript dependencies declared in root project 'projectR eports'. api:buildEnvironment - Displays all buildscript dependencies declared in project ':api'. webapp:buildEnvironment - Displays all buildscript dependencies declared in project ':webap p'. components - Displays the components produced by root project 'projectReports'. [incubating ] api:components - Displays the components produced by project ':api'. [incubating] webapp:components - Displays the components produced by project ':webapp'. [incubating] dependencies - Displays all dependencies declared in root project 'projectReports'. api:dependencies - Displays all dependencies declared in project ':api'. webapp:dependencies - Displays all dependencies declared in project ':webapp'. dependencyInsight - Displays the insight into a specific dependency in root project 'projec tReports'. api:dependencyInsight - Displays the insight into a specific dependency in project ':api'. webapp:dependencyInsight - Displays the insight into a specific dependency in project ':web app'. help - Displays a help message. api:help - Displays a help message. webapp:help - Displays a help message. model - Displays the configuration model of root project 'projectReports'. [incubating] api:model - Displays the configuration model of project ':api'. [incubating] webapp:model - Displays the configuration model of project ':webapp'. [incubating] projects - Displays the sub-projects of root project 'projectReports'. api:projects - Displays the sub-projects of project ':api'. webapp:projects - Displays the sub-projects of project ':webapp'. properties - Displays the properties of root project 'projectReports'. api:properties - Displays the properties of project ':api'. webapp:properties - Displays the properties of project ':webapp'. tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects). api:tasks - Displays the tasks runnable from project ':api'. webapp:tasks - Displays the tasks runnable from project ':webapp'. Вот некоторые списки команд в таблице описания различных опций. |