如何在不指定的情况下使 Maven 将工件部署到远程服务器上的主目录?

How can I make maven deploy artifacts to the home directory on a remote server without specifying it?

我可以像这样将我的项目部署到我的远程服务器:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh-external</artifactId>
                <version>3.0.0</version>
            </extension>
        </extensions>
    </build>

    <distributionManagement>
        <repository>
            <id>internal</id>
            <url>scpexe://maven@myserver.com/home/maven</url>
        </repository>
    </distributionManagement>
</project>

但是(如您所见)我不得不在我的服务器上指定 maven 用户的主目录。通常当我使用scp时,我可以简单地使用scp somefile.txt me@myserver.com:并将文件传输到我服务器上用户的home目录。但是如果我在 pom.xml:

中尝试类似的东西
<distributionManagement>
    <repository>
        <id>internal</id>
        <url>scpexe://maven@myserver.com:</url>
    </repository>
</distributionManagement>

我收到此错误消息:

Execution default-deploy of goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy failed: For input string: "" -> [Help 1]

如果我试试这个:

<distributionManagement>
    <repository>
        <id>internal</id>
        <url>scpexe://maven@myserver.com</url>
    </repository>
</distributionManagement>

然后 Maven 尝试创建 repo 结构并将工件直接部署到服务器根目录。所以我收到此错误消息:

Error executing command for transfer: Exit code 1 - mkdir: cannot create directory ‘//com’: Permission denied -> [Help 1]

有没有一种方法可以指定 maven 存储库驻留在用户主目录中,而无需手动指定主目录的位置?

您可以像这样尝试使用 $HOME 环境变量

<distributionManagement>
    <repository>
        <id>internal</id>
        <url>scpexe://maven@myserver.com:$HOME</url>
    </repository>
</distributionManagement>

或者,如果那行不通,也许这可行?

<distributionManagement>
    <repository>
        <id>internal</id>
        <url>scpexe://maven@myserver.com:~</url>
    </repository>
</distributionManagement>

当然,这是假设您也是 运行 Linux。

$HOME前必须加上端口号

<url>scpexe://maven@myserver.com:22/$HOME</url>

Maven 配置文件使用不同的语法。你的例子显示的是这个

<url>scpexe://maven@myserver.com/home/maven</url>

所以推而广之,你想要的是这个

<url>scpexe://maven@myserver.com/</url>