在 Maven POM 中禁用 distributionManagement

Disable distributionManagement in Maven POM

我正在尝试 运行 在我的 Liferay portlet 上使用 Maven 实现 mvn deploy 目标,但出现以下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.
2:deploy (default-deploy) on project MyPortlet: Deployment failed: repository eleme
nt was not specified in the POM inside distributionManagement element or in -Dal
tDeploymentRepository=id::layout::url parameter -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on pro
ject RiskID: Deployment failed: repository element was not specified in the POM
inside distributionManagement element or in -DaltDeploymentRepository=id::layout

我知道如果您不在 pom.xml 中包含 <distributionManagement /> 标记,此错误将 return,但是我不希望将其打包到远程位置并且想改为部署到我的本地 tomcat 实例;这可以配置吗?

错误与 dependencyManagement 无关,而是 distributionManagement

Deployment failed: repository eleme nt was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

也可以使用 altDeploymentRepository 选项提供替代方案(如果您不想将其放入 pom.xml 文件):

Specifies an alternative repository to which the project artifacts should be deployed ( other than those specified in <distributionManagement> ). Format: id::layout::url

第一个元素 id 必须与 settings.xml 文件中定义的 server 匹配(您在其中指定用于特定服务器的凭据)。

布局和 url 特定于目标存储库。

然后您可以调用命令:

mvn deploy -DaltDeploymentRepository=test:Maven2:http://somewhere:someport

其中testserver element in your Maven settings

的id
<servers>
    <server>
      <id>test</id>
      <username>my_login</username>
      <password>my_password</password>
    </server>
</servers>

更新
根据最新的说明(通过评论和编辑),这里有一些要点:

  • Maven deploy phase 用于

    done in the build environment, copies the final package to the remote repository for sharing with other developers and projects.

  • 因此,在您的情况下,您不需要使用 deploy 阶段或 maven-deploy-plugin
  • 因为Tomcat是目标服务器,所以你需要使用tomcat7-maven-plugin

这里有一些说明:

配置您的 pom.xml
添加到您的 pom.xml 以下内容:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://localhost:8080/manager/text</url>
        <server>tomcat8</server>
        <path>/${project.build.finalName}</path>
    </configuration>
</plugin>

配置您的 settings.xml
添加到您的 Maven settings.xml servers 部分中的以下内容:

<server>
    <username>maven</username>
    <password>maven</password>
    <id>tomcat8</id>
</server>

注意上面设置和插件 configuration 之间的匹配 tomcat8 id,server 元素。

为部署配置 Tomcat
在tomcatconf文件夹中,配置tomcat-users.xml文件:

  <role rolename="manager-script"/>
  <user username="maven" password="maven" roles="manager-gui,manager-script"/>

注意与我们在 Maven 设置中实际指定的匹配的凭据。

试一试
然后从命令行你最终可以调用:

mvn tomcat7:deploy

如果您不想配置settings.xmlpom.xml,则需要通过命令行传递几个参数,如下所示:

mvn org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy \ 
      -Durl=http://localhost:8080/manager/text \
      -Dusername=maven -Dpassword=maven

注意:\ 并添加了换行符以提高可读性

在其 deploy 目标的官方文档中查看选项的完整列表。