Иконка ресурса

Модульный проект

Сообщения
140
Лучшие ответы
3
Реакции
25
Merisen добавил(а) новый ресурс:

Модульный проект - Разделение проекта на модули для "удобности" билда

Фича о которой мало кто знает и которая действительно помогает.
Всплывает она в нескольких вариантах:
  • вам нужно разделить мод на клиент-сервер
  • вам лень на каждый мод делать отдельный воркспейс и ждать пока он установиться и вы наконец-то сможете творить
  • вы вдруг захотели выгребнуться что умеете создавать модули
Для того чтоб все эти манипуляции произвести вам понадобиться установить сам проект(или можете делать на старом, как хотите)...
Узнать больше об этом ресурсе...
 
Сообщения
278
Лучшие ответы
5
Реакции
15
Очень полезно, спасибо!
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,845
Лучшие ответы
77
Реакции
304
Это сабпроджекты и в случаи большого числа сабпроджектов с внутренними модулями данный способ не сработает.
 
Сообщения
798
Лучшие ответы
29
Реакции
235
Не могу подключить сабпроджект в основном build.gradle. Ругается на include:

Код:
buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1'  // 1.8.4 не юзается, т.к. он не работает нифига
    }
}

apply plugin: 'forge'

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

// read-only поле, чтоб его...
//rootProject.name = archivesBaseName // имя главного проекта

/* название наших модулей */
include 'examples' // !!! ОШИБКА !!!

minecraft {
    version = "1.7.10-10.13.4.1614-1.7.10"
    runDir = "eclipse"
}

dependencies {
    // you may put jars on which you depend on in ./libs
    // or you may define them like so..
    //compile "some.group:artifact:version:classifier"
    //compile "some.group:artifact:version"
     
    // real examples
    //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // for more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html

}

processResources
{
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
               
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
       
    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

// Собираем бинарник мода без обфускации. Рабочий вариант, в отличие от оф. доков из ForgeGradle
task deobfJar(type: Jar) {
    classifier "dev"
    from sourceSets.main.output
}

// Формирует jar'ник с доками
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

// Формирует jar'ник с исходниками
task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

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

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

// Чтоб idea смогла запаковать ресурсы в джарник
idea { module { inheritOutputDirs = true } }

// Поддержка руских букв в доках
javadoc { options.encoding = 'UTF-8' }
// Устраняет ошибки и предупреждения компиляции из-за русских комментов
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }

Код:
Build script error, unsupported Gradle DSL method found: 'include()'!

Possible causes could be:
  - you are using Gradle version where the method is absent (Fix Gradle settings)
  - you didn't apply Gradle plugin which provides the method (Apply Gradle plugin)
  - or there is a mistake in a build script (Goto source)
Open File
Юзаю Gradle 2.0, который шел из коробки форжа 1.7.10
 
Сообщения
140
Лучшие ответы
3
Реакции
25
подключить сабпроджект
Тебе не нужно писать инклуд в билде, надо создать settings.gradle и уже в нем написать инклуды проектов которые ты создал.

Вот пишет:
Код:
rootProject.name = "ProjectName" // имя главного проекта

/* название наших модулей */
include 'ClientMod'
include 'ServerMod'
 
Сообщения
798
Лучшие ответы
29
Реакции
235
Как градл поймет что следует заюзать этот файл?

Изменять имя проекта мне не нужно, так что делать этого я не буду. Вот скажи как заставить градл инклюдить проект в поддиректории?

Код:
//rootProject.name = "ProjectName" // имя главного проекта

/* название наших модулей */
include 'examples/case1'
//include 'src'
Выдает:
Код:
Build script error, unsupported Gradle DSL method found: 'getPluginManager()'!

Possible causes could be: 
  - you are using Gradle version where the method is absent (Fix Gradle settings)
  - you didn't apply Gradle plugin which provides the method (Apply Gradle plugin)
  - or there is a mistake in a build script (Goto source)
 
Последнее редактирование:
Сообщения
140
Лучшие ответы
3
Реакции
25
следует заюзать этот файл
Потому что это файл настроек. И в сеттинге не надо комментить главный проект, так как он и будет подхвачен.
Screen Shot 2019-06-15 at 8.39.07 PM.jpg
В главном файле build.gradle не нужно ничего инклудить и добавлять. Все инклуды в сеттинге.
Код:
import ru.justagod.mineplugin.MinePlugin

buildscript {
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.61"
    }
}

apply plugin: 'groovy'
apply plugin: 'forge'
apply plugin: 'kotlin'
apply plugin: MinePlugin

// archivesBaseName = "NAME-client"
// archivesBaseName = "NAME-server"
archivesBaseName = "NAME"

minecraft {
    version = "1.7.10-10.13.4.1558-1.7.10"
    runDir = "idea"
}

compileJava {
    targetCompatibility = JavaVersion.VERSION_1_8
    sourceCompatibility = JavaVersion.VERSION_1_8
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.61"
}

jar {
    destinationDir = file("$rootDir/compiled")
}

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'
    }
}

idea {
    module {
        inheritOutputDirs = true
    }
}
Код:
rootProject.name = "TestMC" // имя главного проекта

/* название наших модулей */
include 'subproject1'
include 'subproject2'
Код:
apply plugin: 'java'

apply from: "$rootDir/build.gradle"

version = ""
archivesBaseName = "subproject1"

sourceCompatibility = 1.8
Код:
apply plugin: 'java'

apply from: "$rootDir/build.gradle"

version = ""
archivesBaseName = "subproject2"

sourceCompatibility = 1.8
 
Сообщения
798
Лучшие ответы
29
Реакции
235
@Merisen У меня субпроджект лежит в "examples/case1". Как заставить градл инклюдить проект, вложенный в папку?

UPD:
Нашел решение, но на grdale 2.0 не пашет. Пришлось обновиться до 4.4.1.

Теперь осталось выяснить как при запуске клиента билдить субпроджект и включать его в список модов.
 
Последнее редактирование:

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,845
Лучшие ответы
77
Реакции
304
@RareScrap, ну что за костыли, и будет у тебя "modules" отдельным модулем. В начале делаешь include, затем достаёшь этот же проект и задаёшь ему папку. Всё!
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,845
Лучшие ответы
77
Реакции
304
@Merisen, создавать в каждом модуле ещё модули сервер/клиент крайне глупо...
 
Сообщения
798
Лучшие ответы
29
Реакции
235
В начале делаешь include, затем достаёшь этот же проект и задаёшь ему папку.
Какая логика в том, чтобы субпрождектам задавать папку проекта-родителя? Да и честно сказать я вообще не понял что ты хотел сказать своим постом.
 
Последнее редактирование:

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,845
Лучшие ответы
77
Реакции
304
@RareScrap, :m_faceplam:
Java:
include 'mygovnoModule'
project(":mygovnoModule").projectDir = file("myfolder/mygovnoModule")
И всё! Будет тебе модуль в отдельной папке без создания модуля "myfolder", и я хз причём тут родительская директория.
 
Сообщения
798
Лучшие ответы
29
Реакции
235
И всё! Будет тебе модуль в отдельной папке без создания модуля "myfolder"
Спасибо, ивасик. Стало лучше чем было. Но все равно странно что при include ':folder:subproject' создается модуль "folder", а в нем еще модуль "subproject". Интересная фича градла...
 
Сообщения
798
Лучшие ответы
29
Реакции
235
Вот еще немного инфы про модульный проект. Оно будет полезно для тех, кто в качестве модулей использует отдельные моды.
 
Сообщения
36
Лучшие ответы
0
Реакции
0
То что я и искал, только подскажите я хочу сделать по типу project red'a. Тогда основным модом будет ядро а сабами расширения?
 
Сообщения
798
Лучшие ответы
29
Реакции
235
Сообщения
140
Лучшие ответы
3
Реакции
25
То что я и искал, только подскажите я хочу сделать по типу project red'a. Тогда основным модом будет ядро а сабами расширения?
Да, как тебе ответил @RareScrap, если будут вопросы о реализации - задавай сюда или же в лс.
 
Сообщения
864
Лучшие ответы
31
Реакции
161
При запуске игры через среду, все моды ведь должны быть загружены?
 
Сообщения
798
Лучшие ответы
29
Реакции
235
При запуске игры через среду, все моды ведь должны быть загружены?
Если сабпроджекты у тебя подразумевают отдельные моды, то тот мод который ты запускаешь должен иметь от них runtimeOnly зависимость.
 
Сообщения
864
Лучшие ответы
31
Реакции
161
Просто я сделал как в гайде, а у меня всё равно только один мод в игре работает(другой он не видит)
 
Сверху