首页 > 解决方案 > Intellij 2021 无法解析来自自定义 maven 存储库的符号?

问题描述

我有一个项目,我正在使用来自自定义存储库的依赖项。这就是我的 build.gradle 的样子(我已经模糊了一些隐私依赖项):

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'groovy'
}

group = 'com.myproject.projectx.sms'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
    maven {
        url "s3://myproject-maven-repo"
        authentication {
            awsIm(AwsImAuthentication)
        }
    }
}

dependencies {
    implementation 'org.postgresql:postgresql'

    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.security:spring-security-core'

    implementation 'com.myproject.top:secret-project:1.2' <------------ Gradle won't download this. why?

    testImplementation 'org.spockframework:spock-spring:2.0-groovy-3.0'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        exclude group: 'org.junit', module: 'junit'
    }

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

test {
    useJUnitPlatform()
}

当我将鼠标悬停在使用top:secret-project依赖项的代码上时,会出现红色波浪下划线。这曾经在旧项目中工作,但为什么 intellij 在这个项目中无法识别它?我也可以在 ubuntu 终端中成功运行项目gradle bootRun。只是intellij无法识别。它还能够识别 spring、postgres、lombok 和 spock 依赖项。

Cannot resolve symbol 'com.myproject.top.secret.TopSecretService'.

当单击 build for gradle 时,我不断收到此错误。

Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied;)

.bashrc我已经在我的文件中导出了正确的密钥和密钥。我也已经配置好了~/.aws/credentials。但我仍然收到上面的错误。

标签: amazon-web-servicesgradleintellij-idea

解决方案


我不是很熟悉 AwsImAuthentication 也不是 s3:// ,但正如官方文档中提到的那样,您需要添加 user/pass 或 user/token 如下

maven {
         url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/'
         credentials {
             username "aws"
             password System.env.CODEARTIFACT_AUTH_TOKEN
         }
}

其中 CODEARTIFACT_AUTH_TOKEN 是环境变量,用于存储您的密码/会话。

您还可以使用 gradle.properties 来检索值,只需确保替换System.env.CODEARTIFACT_AUTH_TOKEN

project.findProperty.CODEARTIFACT_AUTH_TOKEN其中 CODEARTIFACT_AUTH_TOKEN 将密码/令牌存储在您的 gradle 属性中。


推荐阅读