【问题标题】:Get UID in a maven variable?在 Maven 变量中获取 UID?
【发布时间】:2016-12-29 05:58:09
【问题描述】:

我可以在 pom.xml 文件中使用当前用户名和 ${user.name},但是有没有办法获取 uid (userid)?

我使用exec-maven-plugin 并向执行添加参数。我尝试了不同的方法(${env.UID}${user.id}$UID),但都不起作用。

我需要它在 docker 中启动一个将文件写入共享目录的进程。如果我不以-u-参数开头,所有文件都将属于root
配置如下:

<configuration>
  <executable>docker</executable>
  <arguments>
    <argument>run</argument>
    <argument>-u</argument>
    <argument>$UID</argument>
    <argument>...</argument>
  </arguments>
</configuration>

【问题讨论】:

标签: java maven environment-variables


【解决方案1】:

假设我对您的理解正确,这行不通吗?

${user.name}

this 可能重复。

【讨论】:

  • 同意。引用自Docker run --help-u, --user Username or UID (format: &lt;name|uid&gt;[:&lt;group|gid&gt;])
  • 如果用户是在镜像中创建的,我只能使用用户名。我也无法通过共享文件系统将内部 UID 映射到外部 UID。主要目标是让在 docker 中创建的文件属于 docker 之外的用户。它在文档中说:图像开发人员可以创建其他用户。这些用户可以通过名称访问。传递数字 ID 时,用户不必存在于容器中。
【解决方案2】:

我打算编写一个 maven 插件来提供属性 user.id,但后来我没有找到使用标准 java 方法获取用户 ID 的方法。
有两个项目(Java Native AccessJava Native Interface)可以直接访问原生信息,但到目前为止我还没有找到获取UID的方法。

我通过在我的 Dockerfile 中添加 umask-call 解决了我的问题。我强烈建议在 maven 中使用不需要用户 ID 的解决方案。

但在解决这个问题时,我为其他真正需要它的人创建了一个solution。它从系统属性中获取user.name-property,然后打开passwd-文件来搜索uid。当然,这仅适用于类 unix 系统,并且它将构建直接与您的环境耦合,因此请明智地使用此解决方案(最好不要)。
要使用我的解决方案,请将其添加到您的 pom.xml

<plugin>
  <!-- Plugin only works with unix-like environments, please use it wisely! -->
  <groupId>org.rjung.util</groupId>
  <artifactId>user-id-maven-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <goals>
        <goal>user-id</goal>
      </goals>
    </execution>
  </executions>
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多