Полезные ссылки
Управление зависимостями в Gradle имеет много различных подходов и легко для понимания. Если вы знакомы с Maven или Ivy, то Gradle полностью совместим с обоими подходами, а также способен поддерживать пользовательские подходы. Если же вы не знакомы с Gradle, то для изучения существуют отличные ресурсы на официальном сайте. Рекомендуется ознакомится с ними для понимания Gradle.
- Руководство пользователя Gradle
- Руководство по управлению зависимостями в Gradle
- Объявление зависимостей
Руководство по build.gradle
Gradle проекты управляются через build.gradle
файл в их корневой директории. Если вы использовали gdx-setup.jar для создания libGDX проекта, то
вы заметите структуру проектов.
Корневая директория и каждая поддиректория содержит build.gradle
файл, для ясности мы определим зависимости в build.gradle
файле
корневой директории.
Определить зависимости можно в каждом build.gradle
файле поддиректорий, просто понятней и легче, когда все в одном месте.
Вот небольшая часть сценария сборки по умолчанию, которая создается при установке:
Полный сценарий, который вы увидите, будет немного отличаться в зависимости от выбранных вами модулей.
buildscript { // Определение репозиториев, которые требуются для сценария, например: android плагин repositories { // Maven центральный репозиторий, необходимо для android плагина mavenCentral() //репозиторий для libGDX артефактов maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { // Добавление Android Gradle плагина как зависимость этого сценария сборки classpath 'com.android.tools.build:gradle:0.9+' } } allprojects { apply plugin: "eclipse" apply plugin: "idea" version = "1.0" ext { appName = "%APP_NAME%" gdxVersion = "1.0-SNAPSHOT" roboVMVersion = "0.0.10" } repositories { //Определяет все репозитории, необходимые для всех проектов mavenLocal(); mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } } project(":core") { apply plugin: "java" dependencies { // Определяет зависимости для основного проекта, в данном примере gdx зависимости compile "com.badlogicgames.gdx:gdx:$gdxVersion" } } project(":desktop") { apply plugin: "java" dependencies { // Определяет зависимости для desktop проекта, а также добавляет зависимость к основному проекту // gdx lwjgl бекэнд и нативные зависимости compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" } } project(":android") { apply plugin: "android" configurations { natives } dependencies { // Определяет зависимости для android проекта, зависит от основного проекта, // а также android бекэнд и все нативные зависимости для платформы. // Обратите внимание на 'natives' классификатор compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" } }
libGDX зависимости
Зависимости настроены в корневом файле build.gradle
как показано выше в руководстве build.gradle. Для того, чтобы к проекту
подключить внешнюю зависимость, необходимо правильно ее объявить в соответствующей части сценария сборки.
Некоторые расширения libGDX находятся в Maven репозитории, это означает, что вы можете очень легко их загрузить и включить в ваш проект с помощью build.gradle
файла. Ниже вы можете видеть список форматов для зависимостей. Если вы знакомы с Maven, то обратите внимание на формат:
compile '<groupId>:<artifactId>:<version>:<classifier>'
Давайте посмотрим на небольшой пример, чтобы увидеть как работает работает в корневом build.gradle
файле.
Как упоминалось ранее, вам не нужно изменять отдельные build.gradle
файлы в конкретных директориях различных платформ (core, desktop, android,
ios). Вам нужно всего лишь изменить корневой build.gradle
файл.
Здесь мы видим зависимости для расширения FreeType, потому что мы хотим, чтобы наш Android проект имел эти зависимости. Мы разместили пример для Android
проекта в build.gradle
файле корневой директории:
project(":android") { apply plugin: "android" configurations { natives } dependencies { compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" } }
Мы знаем, что расширение FreeType имеет следующее определение:
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
Все что мы должны сделать, это включить определение в зависимости:
project(":android") { apply plugin: "android" configurations { natives } dependencies { compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86" } }
Этим мы сделали то, что теперь android проект имеет FreeType зависимость. Согласитесь, это довольно легко.
libGDX расширения
libGDX расширения в Maven, готовые для импорта в проект, посредством включения в build.gradle
файл:
Box2D Gradle
Core зависимость
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
Desktop зависимость
compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
Android зависимость
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
iOS зависимость
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-ios"
HTML зависимость
compile "com.badlogicgames.gdx:gdx-box2d-gwt:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion:sources"
Bullet Gradle
Core зависимость
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion"
Desktop зависимость
compile "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-desktop"
Android зависимость
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-x86"
iOS зависимость
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-ios"
HTML зависимость
Не совместимы.
FreeTypeFont Gradle
Core зависимость
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
Desktop зависимость
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
Android зависимость
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
iOS зависимость
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
HTML зависимость
Не совместимы.
Controllers Gradle
Core зависимость
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
Desktop зависимость
compile "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop"
Android зависимость
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
iOS зависимость
Не поддерживается, но вы все равно можете скомпилировать и запустить iOS приложение. Контроллеры просто не будут доступны.
HTML зависимость
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion:sources"
Tools Gradle
Core зависимость
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
Desktop зависимость
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
Android зависимость
Не совместимы.
iOS зависимость
Не совместимы.
HTML зависимость
Не совместимы.
Box2DLights Gradle
Box2DLights расширение также требует Box2D расширения.
Core зависимость
compile "com.badlogicgames.box2dlights:box2dlights:1.2"
Android зависимость
compile "com.badlogicgames.box2dlights:box2dlights:1.2"
HTML зависимость
compile "com.badlogicgames.box2dlights:box2dlights:1.2:sources"
Внешние зависимости
Добавление внешних репозиториев
Gradle находит файлы, определенные как зависимости, глядя по всем репозиториям определенных в сценарии сборки. Gradle понимает несколько форматов, которые включают Maven и Ivy.
В allprojects
разделе можно увидеть как определяются репозитории. Вот пример:
allprojects { repositories { // Удаленный Maven репозиторий maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } // Центральный Maven репозиторий mavenCentral() // Локальный Maven репозиторий mavenLocal() // Удаленный Ivy репозиторий ivy { url "http://some.ivy.com/repo" } // Локальный Ivy репозиторий ivy { url "../local-repo" } } }
Добавление зависимостей
Внешние зависимости идентифицируются по их группе, имени, версии и иногда классификатору атрибутов.
dependencies { compile group: 'com.badlogicgames.gdx', name: 'gdx', version: '1.0-SNAPSHOT', classifier: 'natives-desktop' }
Gradle позволяет использовать краткую форму при определении внешних зависимостей, указанная выше конфигурация является такой же как:
dependencies { compile 'com.badlogicgames.gdx:gdx:1.0-SNAPSHOT:natives-desktop' }
Локальные Maven зависимости
Если вы предпочитаете использовать Maven репозитории для управления локальным .jar файлам, то эти две команды возьмут любой локальный .jar файл и установят его (и его исходники) в локальный Maven репозиторий.
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
mvn install:install-file -Dfile=<path-to-source-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -Dclassifier=sources
Чтобы настроить Gradle для включение ваших новых зависимостей, измените build.gradle
файл в корневой директории проекта и измените основной
проект:
project(":core") { ... dependencies { ... compile "<group-id>:<artifact-id>:<version>" compile "<group-id>:<artifact-id>:<version>:sources" } }
После этого вам нужно будет обновить зависимости для вашей среды разработки, поэтому выполните:
- Командная строка -
$ ./gradlew --refresh-dependencies
- Eclipse -
$ ./gradlew eclipse
- IntelliJ -
$ ./gradlew idea
Кроме того не забывайте, что все зависимости добавленные этим путем также должны быть включены в файл наследования GWT.
Файловые зависимости
Вы все равно можете нуждаться в зависимости, которая не в Maven репозитории.
Чтобы включить такую зависимость, вам нужно в корневом build.gradle
файле найти dependencies { } раздел и добавить следующее:
dependencies { compile fileTree(dir: 'libs', include: '*.jar') }
Это включит все .jar файлы из libs директории как зависимости.
Путь "dir" является относительным корня проекта, если вы добавляете зависимости в android проект, то "libs" должна находится в android/ директории. Если вы добавили зависимости в core проект, то "libs" должна находится в core/ директории.
Примеры внешних зависимостей
Universal-Tween-Engine jar
- Скачайте jar файлы.
- Поместите jar файлы в директорию core/libs (можете изменить директорию, если хотите).
- Измените build.gradle сценарий в корневом каталоге следующим образом:
-
- Найдите где объявляются зависимости для core проекта.
- Добавьте строку в зависимости:
-
compile fileTree(dir: 'libs', include: '*.jar')
- Добавьте строку в зависимости:
Ваш сценарий сборки должен выглядеть примерно так:
project(":core") { ... dependencies { ... compile fileTree(dir: 'libs', include: '*.jar') } }
Обновите Gradle проект с помощью командной строки либо используя среду разработки.
Universal-Tween-Engine и локальный Maven репозиторий
Скачайте и распакуйте tween-engine-api из репозитория. Для того чтобы установить эту зависимость и исходные файлы в локальный Maven репозиторий, используйте эти команды:
mvn install:install-file -Dfile=tween-engine-api.jar -DgroupId=aurelienribon -DartifactId=tweenengine -Dversion=6.3.3 -Dpackaging=jar mvn install:install-file -Dfile=tween-engine-api-sources.jar -DgroupId=aurelienribon -DartifactId=tweenengine -Dversion=6.3.3 -Dpackaging=jar -Dclassifier=sources
Теперь когда .jar файлы от Universal-Tween-Engine находятся в локальном Maven репозитории, добавьте зависимости к build.gradle
файлу в корневой
директории.
project(":core") { ... dependencies { ... compile "aurelienribon:tweenengine:6.3.3" compile "aurelienribon:tweenengine:6.3.3:sources" } }
Добавьте наследование в GdxDefinition.gwt.xml
и GdxDefinitionSuperdev.gwt.xml
.
<inherits name='aurelienribon.tweenengine'/>
Теперь просто обновите зависимости:
$ ./gradlew --refresh-dependencies
Gwt наследование
Gwt особенный, поэтому вам необходимо дать знать GWT компилятору от каких модулей зависит проект и от чего наследуется.
Это делается в gwt.xml
файле, в gwt поддиректории. Вам нужно будет внести изменения в GdxDefinition.gwt.xml
и GdxDefinitionSuperdev.gwt.xml
.
gwt.xml по умолчанию:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd"> <module rename-to="html"> <inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' /> <inherits name='com.badlogic.mygame.MyGame' /> <entry-point class='com.badlogic.mygame.client.GwtLauncher' /> <set-configuration-property name="gdx.assetpath" value="../android/assets" /> </module>
Мы зависим от libGDX gwt бекэнда, а так же от основного проекта, поэтому мы определили их в теги. Поэтому, когда вы добавляете вашу зависимость с помощью методов выше, вам нужно добавить его здесь тоже!
Наследование libGDX расширений
Далее приведены расширения libGDX, которые поддерживаются в GWT
- libGDX Core -
<inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
- Box2d -
<inherits name='com.badlogic.gdx.physics.box2d.box2d-gwt' />
- Box2dLights -
<inherits name='Box2DLights' />
- Controllers -
<inherits name='com.badlogic.gdx.controllers.controllers-gwt' />
Пример: Universal Tween Engine
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd"> <module rename-to="html"> <inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' /> <inherits name='com.badlogic.mygame.MyGame' /> //Let's inherit tween <inherits name='aurelienribon.tweenengine' /> <entry-point class='com.badlogic.mygame.client.GwtLauncher' /> <set-configuration-property name="gdx.assetpath" value="../android/assets" /> </module>
Пошаговое руководство Universal Tween Engine
Руководство по добавлению Universal Tween Engine зависимости в ваш проект использует все, что описано в этой статье.
Комментариев нет:
Отправить комментарий