问题 使用Maven通过SCP上传文件失败


我尝试使用scp将maven创建的耳朵上传到应用程序服务器。

当我试图跑

mvn wagon:upload-single

但是我收到以下错误:

[错误]无法在项目de.volkswagen.dps.ear上执行目标org.codehaus.mojo:wagon-maven-plugin:1.0-beta-3:upload-single(default-cli):无法创建Wagon实例null:url不能为null  - > [帮助1]
org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目de.volkswagen.dps.ear上执行目标org.codehaus.mojo:wagon-maven-plugin:1.0-beta-3:upload-single(default-cli):无法为null创建Wagon实例
    在org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:585)
    在org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:324)
    在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:247)
    在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104)
    在org.apache.maven.cli.MavenCli.execute(MavenCli.java:427)
    在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157)
    在org.apache.maven.cli.MavenCli.main(MavenCli.java:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在java.lang.reflect.Method.invoke(Method.java:597)
    在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
引起:org.apache.maven.plugin.MojoExecutionException:无法为null创建Wagon实例
    在org.codehaus.mojo.wagon.AbstractWagonMojo.createWagon(AbstractWagonMojo.java:83)
    在org.codehaus.mojo.wagon.AbstractSingleWagonMojo.execute(AbstractSingleWagonMojo.java:62)
    在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:105)
    在org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:577)
    ......还有14个
引起:java.lang.NullPointerException:url不能为null
    在org.apache.maven.wagon.repository.Repository。(Repository.java:88)
    在org.codehaus.mojo.wagon.shared.WagonUtils.createWagon(WagonUtils.java:51)
    在org.codehaus.mojo.wagon.AbstractWagonMojo.createWagon(AbstractWagonMojo.java:79)
    ......还有17个

我试图将它添加到pom中,但它似乎没有任何影响:

我在pom.xml中添加了以下内容:

...
    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>1.0-beta-6</version>
        </extension>
    </extensions>

    <plugins>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0-beta-3</version>
            <executions>
                <execution>
                    <id>upload-ear</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>upload</goal>
                    </goals>
                    <configuration>
                        <fromFile>${project.build.directory}/${project.build.finalName}.ear</fromFile> 
                        <url>scp://servername/</url>
                        <toDir>.</toDir>
                    </configuration>
                </execution>
            </executions>
        </plugin>
....

任何人都能解释一下我是如何做到这一点的吗?


8277
2017-07-21 13:58


起源



答案:


您当前的配置遵循以下示例 用法 页面,是正确的。但是,在这个例子中 configuration 元素在一个内部声明 execution因此只适用于 这个 特定 execution

所以当你打电话 mvn wagon:upload-single 在命令行上, configuration 不是“使用”,确实没有 url 参数配置。

如果要从命令行调用插件,请使用命令行传递参数 -Durl=foo 依此类推或添加“全球” configuration 元件:

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>1.0-beta-6</version>
    </extension>
  </extensions>  

  <plugins>   
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>wagon-maven-plugin</artifactId>
      <version>1.0-beta-3</version>
      <configuration>
        <fromFile>${project.build.directory}/${project.build.finalName}.ear</fromFile> 
        <url>scp://servername/</url>
        <toDir>.</toDir>
      </configuration>
      ...
    </plugin>
    ...
  </plugins>
  ...
</build>

15
2017-07-21 20:27



配置中的<toDir>元素不在旅行车中考虑:upload-single。您可以在<url>本身中指定targetDir。 - tahagh


答案:


您当前的配置遵循以下示例 用法 页面,是正确的。但是,在这个例子中 configuration 元素在一个内部声明 execution因此只适用于 这个 特定 execution

所以当你打电话 mvn wagon:upload-single 在命令行上, configuration 不是“使用”,确实没有 url 参数配置。

如果要从命令行调用插件,请使用命令行传递参数 -Durl=foo 依此类推或添加“全球” configuration 元件:

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>1.0-beta-6</version>
    </extension>
  </extensions>  

  <plugins>   
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>wagon-maven-plugin</artifactId>
      <version>1.0-beta-3</version>
      <configuration>
        <fromFile>${project.build.directory}/${project.build.finalName}.ear</fromFile> 
        <url>scp://servername/</url>
        <toDir>.</toDir>
      </configuration>
      ...
    </plugin>
    ...
  </plugins>
  ...
</build>

15
2017-07-21 20:27



配置中的<toDir>元素不在旅行车中考虑:upload-single。您可以在<url>本身中指定targetDir。 - tahagh