Maven 2 无依赖的mvn清理

Maven 2 无依赖的mvn清理,maven-2,maven,Maven 2,Maven,我有一个第三方jar,这是我们的项目所必需的。它在中央maven存储库中不可用,因此我在构建期间使用maven安装插件在本地安装jar。我将“安装文件”目标与“验证”阶段联系在一起,这基本上是可行的。pom.xml文件摘录如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht

我有一个第三方jar,这是我们的项目所必需的。它在中央maven存储库中不可用,因此我在构建期间使用maven安装插件在本地安装jar。我将“安装文件”目标与“验证”阶段联系在一起,这基本上是可行的。pom.xml文件摘录如下:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <id>install-myartifact</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>${basedir}/lib/myartifact-1.2.3.jar</file>
                        <groupId>com.example</groupId>
                        <artifactId>myartifact</artifactId>
                        <version>1.2.3</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>myartifact</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>
如果我只运行“mvn安装”,jar将在“验证”期间安装,我可以在后续构建中运行“mvn清洁安装”。但是,我们的构建服务器没有这种灵活性。我考虑了以下几点:

  • 将阶段移到“预清洁”,但前提是每个人第一次总是使用清洁。如果有人只是简单地运行“mvn安装”,那就没用了
  • 复制执行,其中一个发生在“预清理”期间,另一个发生在“验证”期间。这涵盖了所有的基础,但复制的代码留下了不好的味道

  • 理想情况下,我希望有其他选择。是否可以在没有依赖项的情况下干净地运行?或者在不完全复制执行的情况下运行插件两次?谢谢

    看起来您正在使用nexus。将工件部署到nexus repo可能更容易,而不必在该项目中维护它。

    这是未经测试的,但是您不能忽略clean插件配置中的错误吗?例如:

    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>2.4.1</version>
      <configuration>
        <failOnError>false</failOnError>
      </configuration>
    </plugin>
    
    
    
    )还有一种可能性

    将maven配置为跳过清理阶段并在初始化期间运行清理。但我还没有试过


    这样做的缺点是maven总是会清理输出文件夹。

    我遇到了一个相关的问题,我在谷歌搜索解决方案时发现了这个问题,所以我将在这里指出:

    mvn clean在多模块项目中失败,如果在清理过程中调用插件,则同一项目中缺少依赖项。

    我们在某些模块的清理阶段调用antrun插件,正因为如此,所有依赖项都需要存在于maven存储库中,包括同一反应器中的其他模块,在某些情况下,这些模块尚未构建(例如,您刚刚升级了项目版本,或者您正在启动一个新项目)

    这是在中报告的maven antrun错误-这再次导致maven core中的错误:

    我的解决方法是为开发人员(和Jenkins)提供另一种执行clean的方法(shell/bat脚本、ant脚本或一些git/hg clean操作),并让他们调用它


    我建议您的团队采取类似的解决方案(或者在团队内部建立一个共享的maven存储库,必要时使用一台开发人员机器)。

    这是一个好主意,但我们是一家国际公司,拥有分散的开发团队。把它放到主nexus上是一个漫长的过程=(使用本地文件存储库如何?您可以使用模块将文件打包到对等/子目录中,然后将该目录添加为pom.xml中的file:repo。您可以将settings.xml配置为使用nexus repo作为镜像,但仍然允许本地文件repo。Massfords:更改settings.xml是不可能的,这意味着uld会影响所有使用构建的人。我最好在主nexus上获得工件。我将接受这一点作为答案,因为即使它不能解决我的特殊情况,但对大多数人来说应该是这样。如果其他人好奇,我对settings.xml的建议是将镜像设置更改为外部:。This将允许pom参考本地回购协议并绕过镜像。此处的更多信息:不幸的是,否,failOnError不会绕过无法解决依赖关系。所提及的链接现在(2019年2月)位于和感谢@alleen1。我在回答中更新了链接。
    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>2.4.1</version>
      <configuration>
        <failOnError>false</failOnError>
      </configuration>
    </plugin>