【问题标题】:Uploading a File via SCP with Maven fails使用 Maven 通过 SCP 上传文件失败
【发布时间】:2011-03-19 00:28:20
【问题描述】:

我尝试使用 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 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: Unable to create a Wagon instance for null 在 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 不能为空 在 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>
....

谁能解释一下我是如何做到这一点的?

【问题讨论】:

    标签: maven-2 upload scp wagon


    【解决方案1】:

    您当前的配置遵循Usage 页面中给出的示例并且是正确的。但是,在本例中,configuration 元素在 execution 内声明,因此仅适用于 this 特定的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>
    

    【讨论】:

    • 配置中的 元素在 wagon:upload-single 中不考虑。您可以在 本身中指定 targetDir。
    【解决方案2】:

    您可以使用pom.xml 上的配置运行以下命令来运行插件:

    mvn org.codehaus.mojo:wagon-maven-plugin:upload@upload-ear
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      相关资源
      最近更新 更多