【问题标题】:Maven, relative path to local directoryMaven,本地目录的相对路径
【发布时间】:2016-06-20 21:08:40
【问题描述】:

我想复制“.jenkins”或“Temp”目录中的文件。

<artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <executions>        
      <execution>
        <id>copy-resource-one</id>
        <phase>install</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>C:\Users\user\.jenkins</outputDirectory>
                    <resources>
                        <resource>
                            <directory>${basedir}/src/main/resources</directory>
                            <includes>
                                <include>htmlTemplate.html</include>
                                <include>Chart.js</include>
                            </includes>
                        </resource>
                    </resources>
          </configuration>                        
      </execution>
    </executions>

这就是我的 pom.xml 现在的样子。它在我的本地机器上为我工作,但它不适用于其他用户。

这就是我想要的:

<outputDirectory> relative path to Temp </outPutDirectory>

问题:如何确保文件始终复制到“temp”或“.jenkins”文件夹中?有什么变量吗?

【问题讨论】:

  • 请内联发布代码;不是图像
  • 您硬编码了一条路径,这绝对不是最佳做法,并且可能导致它无法在其他机器上运行
  • 我知道它是硬编码的。我想获得“temp”的相对路径,但我不知道如何。请帮忙!
  • 停止使用硬编码路径。你会感觉好多了。这也可能解决你的问题,不管它是什么。
  • 我不知道“临时”文件夹的实际路径如何。就像我说的那样。我知道它是硬编码的,我知道相对路径可以解决我的问题,但是相对路径在 pom.xml 中是什么样子的?请帮忙

标签: java maven jenkins pom.xml maven-resources-plugin


【解决方案1】:

除了建议的答案,您还可以使用 HOMEPATH 系统变量,该变量在 Windows 系统上默认设置。

   <outputDirectory>${HOMEPATH}/.jenkins</outputDirectory>

HOMEPATH 解析为 \Users{用户名}

【讨论】:

    【解决方案2】:

    在 Maven 中,您可以使用 Java properties as Maven properties 进行构建。

    Maven 公开来自java.lang.System 的所有属性。您可以从 System.getProperty() 检索到的任何内容都可以在 Maven 属性中引用

    因此,在您的情况下,您可能会遇到以下情况:

    <outputDirectory>${java.io.tmpdir}</outputDirectory>
    

    并且输出目录将指向基于主机操作系统的用户临时目录。例如,在 Windows 7 中它会是

    C:\Users\<user_Id>\AppData\Local\Temp
    

    有关 Java 属性的完整列表,请查看official documentation,其中:

    java.io.tmpdir: 默认临时文件路径

    您可能也对user.home感兴趣

    user.home: 用户的主目录

    所以你可能想指向${user.home}\.jenkins

    【讨论】:

      【解决方案3】:

      正如上面 cmets 所说,使用硬编码路径是一个非常糟糕的解决方案。

      一种解决方案应该是在 /target 文件夹中创建一个 .jenkins 文件夹:

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <tasks>
                <mkdir dir="${project.build.directory}/.jenkins"/>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      

      将此 .jenkins 文件夹用作输出文件夹:

      <configuration>
         <outputDirectory>${project.build.directory}/.jenkins</outputDirectory>
         ...
      </configuration>
      

      它将适用于所有构建机器(开发人员笔记本电脑或服务器)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 2012-04-13
        • 2017-06-03
        • 2011-12-19
        相关资源
        最近更新 更多