Intellij Idea 禁用Intellij内部AWS CodeArtifact集成的Maven密码加密

rjee0c15  于 2022-11-21  发布在  Maven
关注(0)|答案(2)|浏览(206)

我们正在尝试将MavenAWS' CodeArtifact集成。
我相信我们已经正确地遵循了“Use CodeArtifact with mvn“的指示。
但是,当我尝试从Intellij内部执行mvn clean compile时,我们会遇到以下异常:

[DEBUG] Failed to decrypt password for server codeartifact: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /Users/hooknc/.m2/settings-security.xml (No such file or directory)
org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /Users/nhook/.m2/settings-security.xml (No such file or directory)
    at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.decrypt (DefaultSecDispatcher.java:121)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:114)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:70)
    at org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession (DefaultRepositorySystemSessionFactory.java:167)
    at org.apache.maven.DefaultMaven.newRepositorySession (DefaultMaven.java:350)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:185)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /Users/hooknc/.m2/settings-security.xml (No such file or directory)
    at org.sonatype.plexus.components.sec.dispatcher.SecUtil.read (SecUtil.java:69)
    at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.getSec (DefaultSecDispatcher.java:206)
    at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.decrypt (DefaultSecDispatcher.java:90)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:114)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:70)
    at org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession (DefaultRepositorySystemSessionFactory.java:167)
    at org.apache.maven.DefaultMaven.newRepositorySession (DefaultMaven.java:350)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:185)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: java.io.FileNotFoundException: /Users/hooknc/.m2/settings-security.xml (No such file or directory)
    at java.io.FileInputStream.open0 (Native Method)
    at java.io.FileInputStream.open (FileInputStream.java:195)
    at java.io.FileInputStream.<init> (FileInputStream.java:138)
    at org.sonatype.plexus.components.sec.dispatcher.SecUtil.toStream (SecUtil.java:100)
    at org.sonatype.plexus.components.sec.dispatcher.SecUtil.read (SecUtil.java:56)
    at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.getSec (DefaultSecDispatcher.java:206)
    at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.decrypt (DefaultSecDispatcher.java:90)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:114)
    at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt (DefaultSettingsDecrypter.java:70)
    at org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession (DefaultRepositorySystemSessionFactory.java:167)
    at org.apache.maven.DefaultMaven.newRepositorySession (DefaultMaven.java:350)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:185)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)

最终原因为Caused by: java.io.FileNotFoundException: /Users/hooknc/.m2/settings-security.xml (No such file or directory)
以下是存储在~/.m2/中的settings.xml文件的内容:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository/>
    <interactiveMode/>
    <offline/>
    <pluginGroups/>
    <servers>
      <server>
        <id>codeartifact</id>
        <username>aws</username>
        <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
      </server>
    </servers>
    <mirrors>
      <mirror>
        <id>codeartifact</id>
        <name>domain--repository</name>
        <url>https://domain-<secret_number>.d.codeartifact.us-west-2.amazonaws.com/maven/repository/</url>
        <mirrorOf>*</mirrorOf>
      </mirror>
    </mirrors>
    <proxies/>
    <profiles>
      <profile>
        <id>codeartifact</id>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
          <repository>
            <id>codeartifact</id>
            <url>https://domain-<secret_number>.d.codeartifact.us-west-2.amazonaws.com/maven/repository/</url>
          </repository>
        </repositories>
      </profile>
    </profiles>
    <activeProfiles/>
</settings>

然后,我们运行AWS命令以获取访问CodeArtifact的令牌:

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --profile hooknc --domain domain --domain-owner <secret_number> --query authorizationToken --output text`

它应该设置环境变量CODEARTIFACT_AUTH_TOKEN,该变量应该由settings.xml值${env.CODEARTIFACT_AUTH_TOKEN}获取
所以,我的问题是,如何在使用Intillij时禁用Maven的密码加密?
感谢您抽出宝贵时间。

whitzsjs

whitzsjs1#

@hooknc在你的问题中,你正确地使用了反勾号:

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token ...`

但在你的评论里你用了单引号

export CODEARTIFACT_AUTH_TOKEN='aws codeartifact get-authorization-token ...'

我的猜测是,前者是一个复制粘贴从文档到SO,但后者是错误地复制到您的编辑器手工。
我建议用"$(...)"符号的现代符号替换反勾号,以减少混淆(而且它支持嵌套):

export CODEARTIFACT_AUTH_TOKEN="$(aws codeartifact get-authorization-token ...)"
velaa5lx

velaa5lx2#

这里的问题是IntelliJ IDEA上的一个已知错误,即Maven插件无法解析环境变量。
尝试从命令行导出令牌,并在IntelliJ外部的此终端运行“mvn clean compile”,它可以工作。
了解错误:
https://youtrack.jetbrains.com/issue/IDEA-205484/IDE-does-not-evaluate-environment-variables-from-Maven-user-settings-file
https://youtrack.jetbrains.com/issue/IDEA-96358

相关问题