【问题标题】:Maven error with multiple executions in maven-deploy-plugin在 maven-deploy-plugin 中多次执行的 Maven 错误
【发布时间】:2010-10-13 14:12:58
【问题描述】:

我找到了this nice recipe 并想用它在我们的存储库中部署一些第 3 方文件

命令行调用是

mvn -P deploy-libs

如果我为 一个 文件执行此操作,它会完全按预期工作

<profiles>
    <profile>
        <id>deploy-libs</id>
        <build>
            <defaultGoal>deploy:deploy-file</defaultGoal>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.4</version>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                        <repositoryId>openscada-external</repositoryId>
                        <url>${openscada.distrib.repository}</url>
                        <file>../openscada_opc_dcom/lib/j-interop.jar</file>
                        <pomFile>../openscada_opc_dcom/lib/j-interop.pom</pomFile>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

如果我使用具有多个执行的执行块,它就不起作用。这是一个错误,还是这是预期的行为?

<profiles>
    <profile>
        <id>deploy-libs</id>
        <build>
            <defaultGoal>deploy:deploy-file</defaultGoal>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <repositoryId>openscada-external</repositoryId>
                        <url>${openscada.distrib.repository}</url>
                    </configuration>
                    <executions>
                        <execution>
                            <id>j-interop</id>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                <file>../openscada_opc_dcom/lib/j-interop.jar</file>
                                <pomFile>../openscada_opc_dcom/lib/j-interop.pom</pomFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>j-interopdeps</id>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                <file>../openscada_opc_dcom/lib/j-interopdeps.jar</file>
                                <pomFile>../openscada_opc_dcom/lib/j-interopdeps.pom</pomFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>jcifs</id>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                <file>../openscada_opc_dcom/lib/jcifs-1.2.9.jar</file>
                                <pomFile>../openscada_opc_dcom/lib/jcifs-1.2.9.pom</pomFile>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

我得到的错误是:

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] One or more required plugin parameters are invalid/missing for 'deploy:deploy-file'

[0] Inside the definition for plugin 'maven-deploy-plugin' specify the following:

<configuration>
  ...
  <file>VALUE</file>
</configuration>

-OR-

on the command line, specify: '-Dfile=VALUE'

[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error configuring: org.apache.maven.plugins:maven-deploy-plugin. Reason: Invalid or missing parameters: [Mojo parameter [name: 'file'; alias: 'null']] for mojo: org.apache.maven.plugins:maven-deploy-plugin:2.4:deploy-file
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:587)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:512)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:482)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:330)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:227)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.PluginParameterException: Error configuring: org.apache.maven.plugins:maven-deploy-plugin. Reason: Invalid or missing parameters: [Mojo parameter [name: 'file'; alias: 'null']] for mojo: org.apache.maven.plugins:maven-deploy-plugin:2.4:deploy-file
    at org.apache.maven.plugin.DefaultPluginManager.checkRequiredParameters(DefaultPluginManager.java:1042)
    at org.apache.maven.plugin.DefaultPluginManager.getConfiguredMojo(DefaultPluginManager.java:659)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:429)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:558)
    ... 16 more

有什么想法吗?

【问题讨论】:

    标签: java maven-2 build maven-plugin


    【解决方案1】:

    发生这种情况的原因是当一个插件像你所做的那样从命令行调用时,它没有与之关联的阶段或执行。这意味着它会选择未命名的执行配置,即执行块之外的配置。

    如果您真的想运行多个执行,请将它们绑定到一个阶段,然后调用该阶段。在这种情况下,每次执行都将使用自己的配置运行。

    这里真正没有被问到的问题是你为什么要使用 deploy-file 来部署一堆这样的东西?如果是第 3 方的东西,你应该找一个像 Nexus 这样的 repo 管理器,并将它们一次上传到一个存储库供你的整个团队使用。

    【讨论】:

      【解决方案2】:

      这有点冗长,但可能会有所帮助:

      <profiles>
        <profile>
          <id>deploy-j-interop</id>
          <build>
            <defaultGoal>deploy:deploy-file</defaultGoal>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                  <repositoryId>openscada-external</repositoryId>
                  <url>${openscada.distrib.repository}</url>
                </configuration>
                <executions>
                  <execution>
                    <id>j-interop</id>
                    <goals>
                      <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                      <file>../openscada_opc_dcom/lib/j-interop.jar</file>
                      <pomFile>../openscada_opc_dcom/lib/j-interop.pom</pomFile>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
            </plugins>
          </build>
        </profile>
      
        <profile>
          <id>deploy-j-interopdeps</id>
          <build>
            <defaultGoal>deploy:deploy-file</defaultGoal>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                  <repositoryId>openscada-external</repositoryId>
                  <url>${openscada.distrib.repository}</url>
                </configuration>
                <executions>
                  <execution>
                    <id>j-interopdeps</id>
                    <goals>
                      <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                      <file>../openscada_opc_dcom/lib/j-interopdeps.jar</file>
                      <pomFile>../openscada_opc_dcom/lib/j-interopdeps.pom</pomFile>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
            </plugins>
          </build>
        </profile>
      
        <profile>
          <id>deploy-jcifs</id>
          <build>
            <defaultGoal>deploy:deploy-file</defaultGoal>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                  <repositoryId>openscada-external</repositoryId>
                  <url>${openscada.distrib.repository}</url>
                </configuration>
                <executions>
                  <execution>
                    <id>jcifs</id>
                    <goals>
                      <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                      <file>../openscada_opc_dcom/lib/jcifs-1.2.9.jar</file>
                      <pomFile>../openscada_opc_dcom/lib/jcifs-1.2.9.pom</pomFile>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
            </plugins>
          </build>
        </profile>
      </profiles>
      

      您可以使用以下命令运行它:

      mvn -P deploy-j-interop deploy-j-interopdeps deploy-jcifs
      

      【讨论】:

      • 我想这可行,但我只想指定一个配置文件,而不是单独指定一个配置文件。
      • 尝试编写自己的插件来处理多个文件怎么样?
      【解决方案3】:

      我猜 maven 也尝试执行默认执行,其中未指定 &lt;file&gt;。 通常最好在 pluginManagement 中配置插件,并将不同的执行显式绑定到特定阶段。

      尝试在默认插件配置中加入明确的 '' 和 '' 元素。您可以将垃圾放入其中,以查看是否执行了默认执行,如果执行,则将其中一个执行设为默认。

      【讨论】:

        【解决方案4】:

        要一次完成所有部署(如 Boris 所述),您可以添加:



        MyId1
        DeployAll
        ...


        MyId2
        DeployAll
        ...

        然后使用

        mvn -DDeployAll

        【讨论】:

        • 您忘记了property 下的name 元素。
        【解决方案5】:

        当然这是一个错误。 Maven 插件不应该以这种方式工作。

        【讨论】:

          猜你喜欢
          • 2015-04-09
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多