Как стать автором
Обновить

Комментарии 27

Если вы хотели выплеснуть эмоции, то у вас получилось.
А если хотели предостеречь других от своих ошибок, на каком-то примере, то не очень.
Люди с опытом, понимают о чем вы и без этой кучи слов.
А те, кто с Gradle не знаком, из этой мешанины слов все равно не поймут о чем вы.
Хоть бы пример конфигов привели что ли… как было и как надо.
Да конфиг приводить особого смысла не имеет. Из 150ти строк конфига надо было поменять classpath 'com.jakewharton.sdkmanager:gradle-plugin:+' на classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.1'
Вот эту строку и надо было в статью внести.
Поправил, следуя вашему совету.
150 строк конфига? Да вышутите наверное? Что вы туда засунули то?
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
        // gradle versions
        maven { url "https://github.com/ben-manes/gradle-versions-plugin/raw/mvnrepo" }
        // crashlytics
        maven { url 'http://download.crashlytics.com/maven' }
        maven { url 'https://www.testfairy.com/maven' }
    }

    dependencies {
        // android plugin
        classpath 'com.android.tools.build:gradle:0.11.+'
        // configuration for codegen dependencies (dagger-compiler)
        classpath 'com.neenbedankt.gradle.plugins:android-apt:+'
        // use Java 8 lambdas on android
        classpath 'me.tatarka:gradle-retrolambda:1.3.3'
        // gradle robolectric plugin
//        classpath 'org.robolectric:robolectric-gradle-plugin:0.11+'
        // downloading deps for CI
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.1'
        // versions plugin
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.5-beta-5'
        // crashlytics
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'

        classpath 'com.testfairy.plugins.gradle:testfairy:1.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
configurations {
    all*.exclude group: 'com.android.support', module: 'support-</code>v4'
}



apply plugin: 'android-sdk-manager'
apply plugin: 'android'
apply plugin: 'retrolambda'
apply plugin: 'crashlytics'
apply plugin: 'android-apt'
//apply plugin: 'robolectric'
apply plugin: 'testfairy'
apply plugin: 'versions'

android {
    final APPLICATION_ID = "mercurievv.driftingjury.androidapp"

    compileSdkVersion 19
    buildToolsVersion '19.1'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19

//        applicationId APPLICATION_ID
        versionCode 1
        versionName '0.1.0'

        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

    productFlavors {
        staging {
            buildConfigField "String", "API_URL", "\"https://example-staging.com\""
//            applicationId "${APPLICATION_ID}.staging"
        }

        production {
            buildConfigField "String", "API_URL", "\"https://example.com\""
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    final IS_TRAVIS = "true".equals(System.getenv("TRAVIS"))
    final PRE_DEX_ENABLED = "true".equals(System.getProperty("pre-dex", "true"))

    dexOptions {
        preDexLibraries = PRE_DEX_ENABLED && !IS_TRAVIS
    }

    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }

    lintOptions {
        enable 'IconExpectedSize', 'EasterEgg', 'SelectableText', 'StopShip', 'TypographyQuotes', 'UnusedIds'
        disable 'InvalidPackage'
        warningsAsErrors true
        lintConfig file("$projectDir/lint.xml")
        abortOnError false

    }

    sourceSets {
        main {
            androidTest.setRoot('src/test')
        }
    }
    testfairyConfig {
      apiKey "0_o"
    }

}

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_7
}

repositories {
    // crashlytics
    maven { url 'http://download.crashlytics.com/maven' }
}

final DAGGER_VERSION = '1.2.1'
//final ESPERANDRO_VERSION = '2.0.0'

dependencies {
    androidTestCompile 'junit:junit:4.11'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'org.roboguice:roboguice:2.0'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.j256.ormlite:ormlite-android:4.42'
    compile 'javax.persistence:persistence-api:1.0.2'

    retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:1.3.0'
    compile 'com.crashlytics.android:crashlytics:1.+'

    compile "com.mixpanel.android:mixpanel-android:4.2.1@aar"

    compile 'com.netflix.rxjava:rxjava-android:0.19.0' // FRP

    compile 'com.jakewharton:butterknife:5.1.0' // view injection
    compile 'com.jakewharton.timber:timber:2.4.0' // logging

    compile 'com.squareup.retrofit:retrofit:1.6.0'
    compile 'com.intellij:annotations:12.0' // @Nullable NotNull


//???    compile 'com.github.mttkay.memento:memento:0.2' // retaining objects in activity
    androidTestCompile 'org.mockito:mockito-core:1.9.5'
    androidTestCompile 'org.robolectric:robolectric:2.3'
    androidTestCompile 'com.squareup:fest-android:1.0.8'

/*

    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
        // TODO workaround for http://b.android.com/65445
        exclude group:'com.google.guava', module:'guava'
    }
    androidTestCompile('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
        // TODO workaround for http://b.android.com/65445
        exclude group:'com.android.support', module:'support-v4'
        exclude group:'com.google.guava', module:'guava'
    }
*/
}
configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
    all*.exclude group: 'org.apache.maven', module: 'maven-ant-tasks'
    all*.exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
Ух я смотрю у вас тут полный фарш, если вы это все осилили, почему тогда про + столько вопросов то?
У вас даже уже gradle-versions-plugin стоит, и все равно куча библиотек с + в версиях, почему?
Я писал что я взял готовый конфиг. И да, не стоит доверять всему что написано, но вчера же он работал.
Что то не пойму, то есть вы и половины не используете из того что там написано?

В общем, что вам нужно:
1. указать конкретные версии для всех зависимостей (без +). Что бы избежать эти проблемы в будущем.
2. у вас уже стоит плагин gradle-versions-plugin. Поэтому что бы проверить на наличие новых версий, нужно запустить: gradlew dependencyUpdates
3. Обновить конкретные версии плагинов
Ну я бы не сказал что половину не использую. 1/4. Но планирую.
1. Да теперь это понятно. Просто наверняка не я один такой. Вот и хочется либо таких же как я предупредить либо чтоб это как-то побезопасней было реализовано.
2. Спасибо. Я так понял что это команда обнавления всех зависимостей проекта. В данном случае она бы проблему не решила т.к. баг был как раз в последней версии зависимости.

Ну в общем да. Наука — не ставить плюсы. Но я доверился :)
gradlew dependencyUpdates — вроверяет и показывает какие зависимости могут быть обновлены, эта команда больше ничего не делает. Дальше вам руками нужно обновить. То есть вы бы уже точно знали какие библиотеки были обновлены.

Например:
The following dependencies have later milestone versions:
— com.android.support:support-annotations [19.1.0 -> 21.0.0-rc1]
— com.android.support:support-v4 [19.1.0 -> 21.0.0-rc1]
— com.fasterxml.jackson.core:jackson-annotations [2.3.3 -> 2.4.1]
— com.fasterxml.jackson.core:jackson-core [2.3.3 -> 2.4.1.1]

Спасибо. Полезно.
Я с грейдлом не работал, но по аналогии с мавеном — вполне осилил…

PS чтобы два раза не вставать 2 MercurieVV вы таки нихреново хитрите — в мавене dependency:tree — плагин, который был принят в основной инструментарий сборщика и только. Ни о какой «встроенной команде» речи не идёт — так почему же вы в этом обвиняете грейдл (и искали ли вы соответствующий плагин?)?
Да я не скажу что я прям не осиливаю Градл, но шишку сегодня набил здоровенную. В мавене даже вначале такого не было, но там и версии зависимостей все всегда прописывают. Вроде можно их размазано ставить, но я ни разу такого не встречал и у самого мысли не возникало так написать.

Что насчет зависимостей. плагинов. По чесноку, я этим в мавене ни разу не пользовался т.к. небыло необходимости. Но, столкнувшись с проблемой я поискал и нашел maven.apache.org/plugins/maven-dependency-plugin/resolve-plugins-mojo.html
Для Градла же я искал и не нашел. Так же предполагал что простой gradle dependecies поможет, но запуская его в корневой проекта мне не вывело вообще ни одной зависимости, запуская в модуле выдало только обычные зависимости (не плагины).

Еще мне очень нравится связка Idea с мавен. Шустро работает, подсказки где надо. Ну, надеюсь, со временем и с Градлом все устаканится.
В мавене при сборке dependencyManagment имеет более высокий приоритет, чем зависимости… зависимостей (мда… ну и фраза), думаю и в gradle есть что-то похожее. А вот если нет прямой отсылки к версии зависимости и в dM не прописано — тогда какая-нибудь зависимость может протащить другую версию… И кстати — не всегда рабочую (в рамках проекта, разумеется)…

Idea + maven? Мне не очень… — чуть поменяешь чуть-чуть (например версию) тут же начинается побочный процесс анализа и загрузки и идеей пользоваться уже невозможно.
> Пол рабочего дня, вместо того, чтоб писать код содержащий мою семью, я потратил на то, чтоб узнать что в одном месте вместо '+' надо поставить '0.10.1'.
Вот мне интересно, если разработка так важна для вас, что вы делали последние полтора года тогда?
Как что? Кодировал.
минусующим, грэдл и новая сборка появилась не вчера, а уже достаточно давно. Потратив 10-20 минут в неделю на чтение и тесты помогли бы избежать проблем выше.
Так же копипаста 150+ строк конфига, в котором половина не понятно всегда плохая идея.
А теперь люди перескакивающие с эклипса просто в ужасе, сколько им теперь нужно учить и разбираться, а ведь можно было бы это все избежать, времени было и есть достаточно.
А что значит «перестало запускаться»? Какая-то ошибка была, или молча?
Ошибка была. Но я не сразу понял что дело действительно в Gradle т.к. собиралось все нормально. Не проходил именно запуск приложения на девайс.
UnsupportedMethodException
Unsupported method: AndroidArtifact.getOutputFile().
У меня сейчас используется 0.12+ и пока что проблем нет.

Пробовали:
1. пересобирать проект?
2. пересобрать из командной строки или запуском соотвествующего таска из Android Studio?
3. перезапустить демон: gradlew --stop?
1 и 2 пробовал. На это и потратил столько времени. Я еще пробовал менять 11ю и 12ю версию Градла, Пробовал стирать весь кэш зависимостей.
Вот тут этот баг описывается: code.google.com/p/android/issues/detail?id=72374 Видать он возникает в каких-то специфических случаях.
О «gradlew --stop» не знал, но я убивал в таск менеджере все java процессы и пару раз рестартил комп.
Может есть смысл вначале прочитать основы?

Chapter 8. Dependency Management Basics
www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

Первый же пример:

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

The build script also states that any junit >= 4.0 is required to compile the project's tests.
Я понимал что значит '4.+'. Дело в том, что увидев что такой конфиг выложен в публичный доступ, я и подумать не мог что с этим может быть что-то плохое. Раз человек выкладывал, а другие качали — он знал что делал.
Но как я в кратце описал проблема была не только в этом.
Сам себе злой буратино.

Я так понимаю, вы используете AndroidStudio. У нее не было еще ни одного стабильного релиза. Она в бету-то вышла месяц назад. Вполне ожидаемо, что при ее обновлениях или обновлениях android-gradle плагина, могут возникнуть проблемы и несовместимости. Хотите стабильности — используйте эклипс и ант. Хотите быть на острие — смиритесь с нестабильностью не-релизных версий.
А у меня javafx плугин обновился и иконки пропали.
Хотите стабильности — управляйте версиями вручную. А репозитории в основном maven`овские, между делом.
Градл мне нравится, но уж очень медленный.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории