Хранение зависимостей в jar

Версия Minecraft
1.12.2

will0376

Токсичная личность
2,078
55
585
Доброго времени всем суток. Возник вопрос: Как хранить свои "зависимости" в jar-нике своего мода, которые добавляет gradle?
 

Icosider

Kotliner
Администратор
3,603
99
664
Берёшь shade(можно как-нибудь по другому обозвать) к пример, затем:
Java:
configurations {
    shade

    compile.extendsFrom(shade)
}

jar {
    configurations.shade.each { dep ->
        from project.zipTree(dep)
    }
}
В зависимостях вместо compile используешь shade
 

will0376

Токсичная личность
2,078
55
585
Наверно мне стоило упомянуть, что я в граблях как в жабе... года так 4 назад, т.е. тёмный лес...
shade - папка. Ладно... тогда путь какой? <project>/shade или <project>/build/shade
Океей... а куда этот код вообще пихать? даже с идеей не могу понять нифига в этих граблях .-.
есть вот processResources

Gradle (Groovy):
processResources {
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version
    
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
        
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
    
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
        jar {
            manifest {
                attributes 'FMLAT': 'forge_at.cfg'
                    }
            }
}
если я правильно понимаю - дополнить jar и дописать чуть выше configurations ...
 

will0376

Токсичная личность
2,078
55
585
Нагуглив название ("Fat jar") смог найти код, который добавляет зависимости из папки в среду и в сам jar.
Может кому понадобится build.gradle:
Gradle (Groovy):
buildscript {
    repositories {
        jcenter()
        maven { url = "http://files.minecraftforge.net/maven" }
       // flatDir { dirs 'shade' }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}
apply plugin: 'net.minecraftforge.gradle.forge'


version = "x.x.x"
group = "y.y.y"
archivesBaseName = "modId"

sourceCompatibility = targetCompatibility = '1.8'
compileJava {
    sourceCompatibility = targetCompatibility = '1.8'
}

minecraft {
    version = "1.12.2-14.23.5.2775"
    runDir = "run"
    mappings = "snapshot_20180814"
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'shade')
}

processResources {
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version
 
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
 
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } // FatJar
    }
        jar {
            manifest {
                attributes 'FMLAT': 'forge_at.cfg'
            }
        }
}
А вот и бага. этот "код" запаковывает все исходники в 1 jar .-. 2 мода в 1... прикольно(надо почаще таск clean выполнять.)
 
Последнее редактирование:
3,005
192
592
shade собирает все файлы в один jar. (Мб какие-то доп методы можно юзать, но я хз)
Если тебе нужно хранить зависимости - в моем понимании выглядит так.
Делаешь билд, в jar пихаешь .class файлы из либы.

Как автоматизировать - я хз.
 

will0376

Токсичная личность
2,078
55
585
shade собирает все файлы в один jar.
так это плагин?... я пробовал какой-то ставить, но он ругался на старую версию граблей(2.4... требуется 3.0+)
ну не знаю. в данный момент он делает так, как вроде и надо...(только не знаю, сработает ли это вообще или нет.)
1557195394229.png
 

Icosider

Kotliner
Администратор
3,603
99
664
shade собирает все файлы в один jar. (Мб какие-то доп методы можно юзать, но я хз)
Если тебе нужно хранить зависимости - в моем понимании выглядит так.
Делаешь билд, в jar пихаешь .class файлы из либы.

Как автоматизировать - я хз.
Я выше скинул полностью рабочий код.

так это плагин?... я пробовал какой-то ставить, но он ругался на старую версию граблей(2.4... требуется 3.0+)
Это не плагин, выше код смотри. И я его использовал на 3.5 версии граблей.
 
7,099
324
1,510
Можно заюзать плагин shadow
Gradle (Groovy):
apply plugin: 'com.github.johnrengelman.shadow'

buildscript {
    ....
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
        ...
    }
}
...

shadowJar {
    classifier = ''

    dependencies {
        include(dependency(group: 'com.kek.lol', name: 'Cheburek', version: '1.1'))
    }
}
При сборке пишешь
gralew build shadowJar, и плагин кладет в твой jar указанные либы, в данном случае Cheburek версии 1.1
Пример реального билд-скрипта:
hohserg1/JHocon
 
7,099
324
1,510
Мне нравится) И вообще, это довольно популярный плагин, первая или вторая ссылка в гугле по запросу "include dependecy gradle"
 
7,099
324
1,510
В том, что автоматизация экономит твое драгоценное время, которое лучше потратить на просмотр мемов про котов
Тыж не один раз сборку будешь делать
 

tox1cozZ

aka Agravaine
8,456
598
2,892
Да хз в чем там экономия. У меня лежит готовый джарник с нужными зависимостями и тд: открыл тот готовый джарник, удалил из него классы, закинул туда классы из свежесобранного, все.
 
Сверху