【问题标题】:"Unresolved dependency" / "import cannot be resolved" in VS Code Java language support when working with Artifactory dependecies使用 Artifactory 依赖项时,VS Code Java 语言支持中的“未解决的依赖项”/“无法解析导入”
【发布时间】:2021-02-14 10:29:53
【问题描述】:

我们有一堆发布到 Artifactory 的私有 Java 依赖项。我们正在使用 Gradle 来构建我们的项目。

问题在于 VSCode Language Support for Java 无法识别 build.gradle 或我们的 Java 源代码中的依赖项/导入。

注意:下面的所有 sn-ps 都是完全从源代码/VS Code 消息中复制粘贴的,除了公司域被替换为 mycompany.com 并且 Artifactory 凭据被编辑。

我在 Java 源代码中看到的错误是:

The import com.mycompany.observability cannot be resolved
MycompanyLogger cannot be resolved

这是有错误的 Java 文件:

package com.mycompany.sample;

import com.mycompany.observability.logging.MycompanyLogger;

public class SampleApplication {

  public static void main(String[] args) {
    MycompanyLogger.setServiceName("SERVICE_NAME");
  }
}

还有build.gradle中的错误:

Unresolved dependency: com.mycompany:core-observability-spring:0.0.37

这是build.gradle 文件:

plugins {
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'java-library'
    id 'application'
    id 'checkstyle'
    id 'pmd'
    id 'jacoco'
    id 'com.jfrog.artifactory' version "4.17.2"
    id "org.sonarqube" version "3.0"
}

group = 'com.mycompany'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

repositories {
    mavenLocal()
    mavenCentral()
}

jar.archiveBaseName = "sample-service"
mainClassName = 'com.mycompany.sample.SampleApplication'

apply plugin: 'com.jfrog.artifactory'
apply plugin: "java"

artifactory {
    contextUrl = "https://artifactory.mycompany.com/artifactory/"
    resolve {
        repository {
            repoKey = 'gradle-release'
            username = project.findProperty('artifactory_user')
            password = project.findProperty('artifactory_key')
            maven = true
        }
    }
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter-aop')
    implementation('org.codehaus.janino:commons-compiler:3.1.0') // Conditional expressions in logback
    implementation('org.codehaus.janino:janino:3.1.0') // Conditional expressions in logback
    implementation("ch.qos.logback:logback-classic:1.2.3")
    implementation('net.logstash.logback:logstash-logback-encoder:6.3')
    implementation('com.datadoghq:dd-java-agent:0.51.0')

    implementation('com.mycompany:core-observability-spring:0.0.37')
}

checkstyle {
    toolVersion "8.29"
    configFile = file("${rootDir}/config/checkstyle/google_checks.xml")
}

jar {
    enabled = true
}

pmd {
    ignoreFailures = false
    ruleSetFiles = files("config/pmd/mycompany_custom_ruleset.xml")
    ruleSets = []
    sourceSets = []
}

以下是我的~/.gradle/ 目录中的相关文件:

➜  .gradle cat gradle.properties
artifactory_user=<redacted>
artifactory_key=<redacted>
➜  .gradle cat init.gradle.kts  
settingsEvaluated {
    pluginManagement {
        val artifactory_user: String? by settings
        val artifactory_password: String? by settings
        val artifactory_key: String? by settings

        repositories {
            maven(url = "https://artifactory.mycompany.com/artifactory/gradle-release") {
                credentials {
                    username = artifactory_user
                    password = artifactory_password ?: artifactory_key
                }
            }
            gradlePluginPortal()
        }
    }
}

最后,这是我的 .vscode 这个项目的配置文件:

➜  .vscode git:(vscode-settings) cat settings.json 
{
    "[java]": {
        "editor.formatOnSave": false,
    },
    "editor.formatOnSave": true,
    "files.insertFinalNewline": true,
    "files.trimFinalNewlines": true,
    "files.trimTrailingWhitespace": true,
    "terminal.integrated.scrollback": 10000,
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.import.gradle.enabled": true,
    "java.import.gradle.wrapper.enabled": true,
    "java.import.maven.enabled": false,
}
➜  .vscode git:(vscode-settings) cat extensions.json 
{
    "recommendations": [
        "gabrielbb.vscode-lombok",
        "pivotal.vscode-spring-boot",
        "richardwillis.vscode-gradle-extension-pack",
        "vscjava.vscode-java-pack"
    ]
}

使用./gradlew build 编译应用程序时一切正常:

➜  sample-service git:(master) ✗ ./gradlew build

BUILD SUCCESSFUL in 5s
11 actionable tasks: 8 executed, 3 up-to-date

关于调试此问题的后续步骤有什么想法吗?

【问题讨论】:

  • 字面意思是说Unresolved dependency: com.redacted:some-library:0.1.2还是你改了那个名字?因为如果包名本身已经“告诉人们太多”关于您的代码的信息,那么作为asking a good question 的一部分,创建一个minimal reproducible example可以 显示而无需编辑。我们不关心您的代码,我们只关心帮助您解决问题。如果你不能展示你的真实代码,把你的代码简化为一个你验证过的玩具实现仍然会展示问题,然后就展示它。
  • 感谢@Mike'Pomax'Kamermans 的反馈,非常公平。正如您可以想象的那样,创建一个最小的可重现示例需要几天时间。你说我上次编辑后清楚了吗?
  • 其实我觉得我可以在这里做/分享更多。就可以了。
  • 好的,完成 - 我认为这应该是相当不错的。感谢您的反馈@Mike'Pomax'Kamermans
  • 您可以添加另一个也在 com.mycompany:core-observability-spring:0.0.37 的存储库下的依赖项,以检查您是否成功连接到它。如果连接成功,请检查依赖的名称和版本号是否有问题。更甚者,会不会是依赖本身有问题?

标签: java gradle visual-studio-code artifactory


【解决方案1】:

我遇到了同样的问题,帮助我运行的是什么

Java: Clean Java Language Server Workspace 来自Command Palette

Java 语言服务器似乎保留了旧版本。

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2016-09-14
    • 2019-03-23
    • 2017-11-12
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多