скучно. го болтать о том как вы совмещаете градло модули и жава модули

1,108
47
425
чот в лоб если делать жава тупа не видит зависимостей некоторых модулей. типа если добавить зависимость градломодулю, жава компилятор ее не увидит. костылю как то через module path но мб у вас есть более кайфовые идеи.
 
чот в лоб если делать жава тупа не видит зависимостей некоторых модулей. типа если добавить зависимость градломодулю, жава компилятор ее не увидит. костылю как то через module path но мб у вас есть более кайфовые идеи.
Нук кинь код, у меня всё нормально видит :/
 
всмысоле я до сих пор батниками компилирую
В топку градл, верните mcp'шную компиляцию на батниках.
Ну раз уж на то пошло, то в идеи можно импортировать градле проект, и о Боже! Собирать проект нажатием кнопки build! Странно, что в 2к19 у вас возникают сложности со сборкой с помощью градле...
 
Нук кинь код, у меня всё нормально видит :/
Чутка не понимаю какой именно код тебе кидать но допустим
У меня есть градло проект примерно такого вида
Bash:
compile - Dependencies for compilation 'main' (target  (jvm)) (deprecated, use 'implementation ' instead).
+--- project :Common
|    +--- com.beust:klaxon:4.0.2
|    |    +--- org.jetbrains.kotlin:kotlin-reflect:1.2.60 -> 1.3.11
|    |    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.11
|    |    |         +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.11
|    |    |         \--- org.jetbrains:annotations:13.0
|    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.60 -> 1.3.11 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:{prefer 1.3.10} -> 1.3.10
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.10 -> 1.3.11 (*)
|    |    \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.10
|    |         \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.10 -> 1.3.11 (*)
|    \--- org.jetbrains.kotlin:kotlin-reflect:1.3.11 (*)
+--- project :bencode
|    \--- org.yaml:snakeyaml:1.17
+--- project :Torrent
|    +--- project :Common (*)
|    +--- project :jlibtorrent
|    +--- org.yaml:snakeyaml:1.17
|    +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:{prefer 1.3.10} -> 1.3.10 (*)
|    +--- org.apache.logging.log4j:log4j-core:2.4.1
|    |    \--- org.apache.logging.log4j:log4j-api:2.4.1
|    \--- org.apache.logging.log4j:log4j-slf4j-impl:2.4.1
|         +--- org.slf4j:slf4j-api:1.7.12
|         \--- org.apache.logging.log4j:log4j-api:2.4.1
+--- org.openjfx:javafx-controls:11
|    \--- org.openjfx:javafx-graphics:11
|         \--- org.openjfx:javafx-base:11
+--- org.openjfx:javafx-graphics:11 (*)
+--- org.openjfx:javafx-fxml:11
|    \--- org.openjfx:javafx-controls:11 (*)
+--- org.openjfx:javafx-base:11
\--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:{prefer 1.3.10} -> 1.3.10 (*)
Код:
plugins {
    id 'java'
    id 'idea'
    id 'kotlin'
}

group 'ru.justagod'
version 'chota'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

javafx {
    modules = [ 'javafx.controls', 'javafx.graphics', 'javafx.fxml' ]
}

dependencies {
    compile project(":Common")
    compile project(':bencode')
    compile project(":Torrent")
    compile group: 'org.openjfx', name: 'javafx-controls', version: '11', classifier: 'win'
    compile group: 'org.openjfx', name: 'javafx-graphics', version: '11', classifier: 'win'
    compile group: 'org.openjfx', name: 'javafx-fxml', version: '11', classifier: 'win'
    compile group: 'org.openjfx', name: 'javafx-base', version: '11', classifier: 'win'
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    //compile fileTree(dir: rootProject.file('lib'), include: '**/*.jar')
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

jar {
    archivesBaseName = "sc_launcher"
    configurations.compile.each {
        from(project.zipTree(it))
    }
    manifest {
        attributes 'Main-Class': 'ru.justagod.launcher.Main'
    }
}

idea.module.inheritOutputDirs = true
Код:
plugins {
    id 'java'
    id 'idea'
    id 'kotlin'
}

group 'ru.justagod'
version '1.0-SNAPSHOT'


dependencies {
    compile project(':Common')
    compile project(':jlibtorrent')
    compile "org.yaml:snakeyaml:1.17"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile 'org.apache.logging.log4j:log4j-core:2.4.1'
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.4.1'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
Код:
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.10'
    id 'org.openjfx.javafxplugin' version '0.0.7'
}
apply plugin: 'idea'
group 'ru.justagod'
version '1.0-SNAPSHOT'
repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.11'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

subprojects {
    repositories {
        mavenCentral()
        maven {
            url 'http://4thline.org/m2/'
        }
        maven {
            url 'http://repo.spring.io/plugins-release/'
        }
    }
}
Java:
module launcher.torrent {
    exports ru.justagod.torrentMeta;
    exports bt.bencoding;
    exports bt.bencoding.model;
    requires kotlin.stdlib;
    requires transitive jlibtorrent;
    requires snakeyaml;
}
Ну и как бы когда я пытаюсь сбилдить Launcher, жава не могет сбилдить модуль Torrent так как не видит kotlin.stdlib и snakeyaml.
 
Хм, странно, а ты в settings.gradle указал свои модули?
 
крч я решил эту загадку
проблема была сразу в двух местах:
1) Котлин и жава компилятся в 2 разных места и потому жава компилер считает котлин как бы отдельным неименованым модулем. А как известно его прочитать нельзя.
2) Градл юзал и юзает параметр --classpath для жава компилятора чтобы указать откуда ему брать бинарники зависимостей. Но начиная с жавы 9 classpath был заменен на module-path.
Потому я накидал вот такой костыль:
Gradle (Groovy):
idea.module.inheritOutputDirs = true
compileKotlin.destinationDir = compileJava.destinationDir
compileJava {
    inputs.property("moduleName", "launcher.bootstrap")
    doFirst {
        options.compilerArgs = [
                '--module-path', classpath.asPath,
        ]
        classpath = files()
    }
}
 
Назад
Сверху