Maven-публикация мультипроекта

Версия Minecraft
1.7.10
1,159
38
544
Здарова ребята. Опять этот градл кровь мою пьет. Задача - научить эту паскуду собирать всемодули как отдельные моды и выкладывать их на bintray. Причем сделать это хочется нормально - через allProjects { ... }. Без дублирования скрипта публикации в каждом модуле.

Вот лучшее что у меня получилоь сделать. Но case2 все равно публикуется с неправильной версией (вместо 0.4.0 должно быть 0.4.0_1.7.10):
root build.gradle:
buildscript { // Непонятно почему я не могу разделить этот блок на зависимости для всех проектов и на зависимости для рутпроект. Ругается на невозможность резолва
    repositories {
        jcenter()
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
        maven {
            url = "https://dl.bintray.com/rarescrap/minecraft"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
        classpath 'ru.rarescrap:depATs:1.0.0' // Для поиска трансформеров в зависимостях
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1' // 1.8.4 не юзается, т.к. он не работает нифига
    }
}

allprojects {
    repositories { // Вообще, этот реп нужен только в case2, но тогда рутпроект не может найти местонахождение configurabeweight
        maven {
            url = "https://dl.bintray.com/rarescrap/minecraft"
        }
    }

    apply from: "$rootDir/gradle/mcforge.gradle"



    group= "ru.rarescrap.weightapi"

    // Подготавливает maven-публикацию, которая будет использоваться в bintray
// Именно тут определяются артефакты для публикации
    apply plugin: 'maven-publish'
    publishing {
//        afterEvaluate {
        publications {
            "$project.name"(MavenPublication) {
                afterEvaluate {
                    //from components.java // Артефакты по умолчанию. Отлючаем их, т.к. нам нужно артефакт main-модуля заменить на артефакт от api-модуля
                    groupId group
                    artifactId archivesBaseName
//                version "0.4.0_1.7.10"
                    version "${project.version}_1.7.10"
                    artifact deobfJar
                    artifact sourcesJar
                    artifact javadocJar
                }
            }
        }
//        }

    }

// Публикация либы в bintray/jcenter
    apply plugin: 'com.jfrog.bintray'
    bintray {
        user = 'rarescrap'
        key = "866f8da09ed3eaaaa3d982830bee4304173fb8d5" //System.getenv('BINTRAY_KEY')
        publications = ["$project.name"]
        dryRun = true
        pkg {
            repo = 'minecraft'
            name = 'weight-api'
            licenses = ['GPL-3.0']
            vcsUrl = 'https://github.com/RareScrap/WeightAPI.git'
            version {
                afterEvaluate {
//                    name = "0.4.0_1.7.10"
                    name = "${project.version}_1.7.10"
                    released = new Date()
                }
            }
        }
    }







}

subprojects { // TODO: Forge дублируется в зависимостях с битым путем
    dependencies {
        compile rootProject
    }
    configurations { // TODO: Должен быть способ лучше эксклюдить кейсы в самих же кейсах. Что-то вроде "transitive = false"
        runtimeOnly.exclude module: 'case1'
        runtimeOnly.exclude module: 'case2'
    }
}

version = "0.4.0"
//group= "ru.rarescrap.weightapi" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "weightapi"
def publicationVersion = version+'_1.7.10'

apply plugin: 'DepATs'
minecraft { at(DepATs.getDepATs()) } // Включаем трансформеры из зависимостей

dependencies {
    // При запуске игры из рутпроекта сабпроджкты подлючатся как моды
    runtimeOnly project(':case1')
    runtimeOnly project(':case2')
}

Вывод [ICODE]gradlew bintrayUpload[/ICODE]:
C:\Users\yourmomgay\Desktop\WeightAPI>gradlew bintrayUpload

[QUOTE] Configure project :case1[/QUOTE]
Found AccessTransformer in main resources: weightapi_example1_at.cfg

[QUOTE] Configure project :case2[/QUOTE]
Found AccessTransformer in main resources: weightapi_example2_at.cfg

[QUOTE] Task :case1:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-dev.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-sources.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-javadoc.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10.pom...

[QUOTE] Task :case2:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-dev.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-sources.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-javadoc.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10.pom...

[QUOTE] Task :bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi/0.4.0_1.7.10/weightapi-0.4.0_1.7.10-dev.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi/0.4.0_1.7.10/weightapi-0.4.0_1.7.10-sources.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi/0.4.0_1.7.10/weightapi-0.4.0_1.7.10-javadoc.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi/0.4.0_1.7.10/weightapi-0.4.0_1.7.10.pom...


BUILD SUCCESSFUL in 21s
40 actionable tasks: 12 executed, 28 up-to-date

case2 ведет себя очень странно. Поэтому я решил вырезать скрипт публикации из рутпроджекта и попробовать вставить его в build.gradle case2 и case1, чтобы сравнить вывод. И вот что мы имеем:

gradlew bintrayUpload:
C:\Users\DangerArea\Desktop\WeightAPI>gradlew bintrayUpload

[QUOTE] Configure project :case1[/QUOTE]
Found AccessTransformer in main resources: weightapi_example1_at.cfg

[QUOTE] Configure project :case2[/QUOTE]
Found AccessTransformer in main resources: weightapi_example2_at.cfg

[QUOTE] Task :case1:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/case1/0.4.0/case1-0.4.0.pom...

[QUOTE] Task :case2:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/case2/0.4.0/case2-0.4.0.pom...


BUILD SUCCESSFUL in 7s
7 actionable tasks: 7 executed

Как видите, артефакты не цепляются к публикации (но цепляются при таком же скрипте в рутпроджекте, факинщит). А дело тут в сраном afterEvaluate. Он нужен чтобы скрипт в рутпроджекте назначал имена, версии и артефакты публикациям только после того как подцепит их из билдскриптов-сабпроджектов. Убирает эту херню и получаем:

gradlew bintrayUpload:
C:\Users\DangerArea\Desktop\WeightAPI>gradlew bintrayUpload

[QUOTE] Configure project :case1[/QUOTE]
Found AccessTransformer in main resources: weightapi_example1_at.cfg

[QUOTE] Configure project :case2[/QUOTE]
Found AccessTransformer in main resources: weightapi_example2_at.cfg

[QUOTE] Task :case1:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-dev.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-sources.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10-javadoc.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0_1.7.10/ru/rarescrap/weightapi/weightapi-case1/0.4.0_1.7.10/weightapi-case1-0.4.0_1.7.10.pom...

[QUOTE] Task :case2:bintrayUpload[/QUOTE]
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-dev.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-sources.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10-javadoc.jar...
Uploading to https://api.bintray.com/content/rarescrap/minecraft/weight-api/0.4.0/ru/rarescrap/weightapi/weightapi-case2/0.4.0_1.7.10/weightapi-case2-0.4.0_1.7.10.pom...


BUILD SUCCESSFUL in 21s
34 actionable tasks: 9 executed, 25 up-to-date
И опять косяк с версией. Косяк уходит только если вручную сменить version в case2 на нужную.

Вопрос вот в чем: ЧТО ЭТО ЗА ХЕРНЯ?! Как мне написать нормальный скрипт публикации, чтобы затем вынести его в отдельный файл?! Що это за говно такое вообще?! Уже больше месяца я ковыряюсь в этом дерьме вместо того чтобы писать софт. Я уже блть даже думаю над тем, чтобы сменить профессию. Или к гадалке сходить потому как инфа сотка это проклятие какое-то. Градлфорум молчит (хотя они те еще уроды, stackoverflow молчит, гугл молчит, доки молчат, исьюсы на гитхабе бинтрей-плагина молчат. Даже блть сраный форум лагает и хаотично меняет шрифты. Я уже на грани алкоголизма. Выручайте, пасаны.
 
1,038
57
229
a_WTAXqbLVY.png

кури мануал, инфы наверняка просто немерено. Я не работал с gradle дальше 1го проекта. НО где то на форуме даже видел такую статью по нему.
Кроме того, всегда есть другие сборщики, которые появились за долго до gradle и maven. И его зовут Ant, правда он не умеет отслеживать зависимости, за то собирает он отлично. Хочешь, 1 пакет сюда другой сюда. Хочешь, можно код вырезать из файла и скомпилить без него и положить в третий архив.. и т.д.
Ну и в конце концов, если уж вы софтварный разработчик, почему не написать свой софт для этого?
 
Последнее редактирование:

tox1cozZ

aka Agravaine
8,455
598
2,892
Я порой удивляюсь тебе.
Такую чушь несёшь, аж мозги выворачиваются.
Ант умер уже триста лет назад. Да и если фордж даёт тебе грэдл(у него даже своя тулза написана под него - ForgeGradle), как ты ему что-то другое подсунешь?
Дааа, писать свой сборщик, изобретая велосипед из костылей - это в твоём стиле...
 
1,159
38
544
Ой, а я тут йух пинал целый месяц.

Я не работал с gradle дальше 1го проекта. НО где то на форуме даже видел такую статью по нему
Не все статьи по градлу покрывают мою проблему, очевидно же.

почему не написать свой софт для этого?
Крайне нерационально писать свой сборщик лишь ради публикаций в бинрепе.
 
1,038
57
229
Не все статьи по градлу покрывают мою проблему
что они не решают?
 
1,159
38
544
3,005
192
592
В чем смысл накидываться на ТС?
Не знаешь как помочь - зачем орать "УУУ ГРАБЛИ УУУ", вроде и правило ввели, но все равно, продолжается.

Знаешь как сделать на граблях? Тогда напиши как, а не ори, что они лучше и больше подходят для ТС.

Если ТС решил делать не на граблях, значит он и будет делать не на них, пока как минимум не узнает (!с аргументами!) как сделать на граблях.
 
1,038
57
229
многомодульный билд на бинтрей
тебе надо выложить в репу каждый модуль в отдельности, а главному, указать зависимость от других. Это именно так работает.

Не знаешь как помочь - зачем орать "УУУ ГРАБЛИ УУУ"
не совсем понял о ком ты, вроде никто не кричал.
 
Сверху