【问题标题】:Gradle Multi-Modular, Sub-Project can't see dependenciesGradle Multi-Module,子项目看不到依赖项
【发布时间】:2020-02-09 22:47:30
【问题描述】:

项目结构如下,MyProject 为根项目,DataManager 和 FileManger 为子项目。根项目包括两个子项目,DataManger 包括 FileManager。问题是 DataManager 的依赖项不可见,所以它说。导入 DataManager 时,MyProject 也有同样的问题。 错误都和这个类似:

C:\Users\XX\XX\XX\MyProject\DataManager\src\main\java\DataManager\DataManager.java:15: error: package org.yaml.snakeyaml is not visible
import org.yaml.snakeyaml.Yaml;
               ^
  (package org.yaml.snakeyaml is declared in the unnamed module, but module org.yaml.snakeyaml does not read it)

.

MyProject
   \build.gradle
    settings.gradle
    src
       \main
           \java
               \module-info.java
                MyProject
                    \App.java
   \DataManager
      \build.gradle
       src
          \main
              \java
                  \module-info.java
                   DataManager
                       \DataManager.java
   \FileManger
      \build.gradle
       src
          \main
              \java
                  \module-info.java
                   FileManger
                       \FileManger.java

我的项目构建:

plugins {
    id 'java'
    id 'application'
    id 'groovy'
    id 'org.openjfx.javafxplugin' version '0.0.8'
    id 'org.beryx.jlink' version '2.12.0'
}

javafx {
    version = "13"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

mainClassName = "$moduleName/MyProject.App"

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'MyProject'
    }
}

repositories {
    jcenter()
}

dependencies {
    implementation 'com.google.guava:guava:28.1-jre'

    testImplementation 'org.codehaus.groovy:groovy-all:2.5.8'

    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
    testImplementation 'junit:junit:4.12'

    compile project (':DataManager')
    compile project (':FileManager')
}

application {
    mainClassName = 'MyProject.App'
    mainClassName = "$moduleName/MyProject.App"
}

MyProject 模块信息:

module MyProject{
    requires javafx.fxml;
    requires javafx.controls;
    requires DataManager;

    opens MyProject to javafx.fxml;
    exports MyProject;
}

DataManger 构建:

plugins {
    id 'java'
    id 'groovy'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'com.google.guava:guava:28.1-jre'

    // Use SnakeYAML
    implementation group: 'org.yaml', name: 'snakeyaml', version: '1.25'

    testImplementation 'org.codehaus.groovy:groovy-all:2.5.8'

    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
    testImplementation 'junit:junit:4.12'

    compile project(':FileManager')
}

DataManager 模块信息:

module DataManager{
    requires FileManager;
    requires snakeyaml;

    exports DataManager;
}

文件管理器构建:

plugins {
    id 'java'
    id 'groovy'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'com.google.guava:guava:28.1-jre'

    testImplementation 'org.codehaus.groovy:groovy-all:2.5.8'

    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
    testImplementation 'junit:junit:4.12'
}

文件管理器模块信息:

module FileManager{
   exports FileManager;
}

【问题讨论】:

  • 您在DataManager 中的module-info.java 没有requires snakeyaml。还要确保根settings.gradle 包含您的子项目,方法是添加include 'DataManager', 'FileManager'
  • 我添加了 requiressnakeyaml 并尝试了 org.yaml.snakeyaml 并抛出 module not found: snakeyaml。这与我在 DataManager 中遇到的 FileManger 错误相同。我的设置文件确实包含该内容。

标签: java gradle javafx java-13


【解决方案1】:

使用 Gradle 时删除 module-info.java 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多