标签: maven-lifecycle

Maven:生命周期与阶段与插件与目标的对比

相对较新的开发人员,尽管我已经使用了一段时间,但我希望能够巩固我的Maven基础知识.我的一部分问题是我没有使用Ant的经验,这似乎来自许多解释的起源.我一直在阅读和观看教程,我一直听到相同的条款:

  • 生命周期
  • 插入
  • 目标

从我所学到的,似乎生命周期是最广泛的,并且由阶段,插件和/或目标组成(或完成).

问题:您能否提供有关这些术语如何相关的任何信息以及最常见的示例?

越明确,越基本越好!

pom.xml maven-3 maven maven-lifecycle

101
推荐指数
6
解决办法
5万
查看次数

如果设置了skipITs,如何跳过maven阶段预集成测试?

我有一些依赖于测试数据的集成测试.该测试数据在阶段创建并在阶段中pre-integration-test删除post-integration-test.

我的问题是,如果我-DskipITs在Maven命令行上使用这些阶段仍然执行.

有没有什么方法-DskipITs可以跳过预集成测试和后集成测试阶段?

这是pom中的插件定义:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

<configuration>
    <driver>com.mysql.jdbc.Driver</driver>
    <url>${database.url}</url>
    <username>${database.user}</username>
    <password>${database.pw}</password>
</configuration>

<executions>
    <execution>
        <id>create-integration-test-data</id>
        <phase>pre-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <orderFile>descending</orderFile>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                    <include>AdministrationTestSetup.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>

    <execution>
        <id>remove-data-after-test</id>
        <phase>post-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

integration-testing maven maven-failsafe-plugin maven-lifecycle

14
推荐指数
2
解决办法
5804
查看次数

是否有可能从p2 repo解析maven插件中的依赖关系

我正在开发一个maven插件,它将用于覆盖默认的maven生命周期,并将使用我的代码.我有多个jar依赖项(eclipse和我的另一个应用程序插件).我有那些罐子的p2回购.如何将这两个集成以解决所有依赖关系?Tycho不能使用,因为它只能用于RCP应用(我的理解/误解).

与此类似 - 问题

还有其他解决方法吗?

dependencies p2 maven-plugin tycho maven-lifecycle

12
推荐指数
1
解决办法
855
查看次数

在maven生命周期中添加阶段?

我尝试在maven生命周期中添加一些额外的阶段.主要是添加一些额外的测试级别:

<phases>
    <phase>initialize</phase>
    <phase>process-resources</phase>
    <phase>compile</phase>
    <phase>process-test-resources</phase>
    <phase>test-compile</phase>
    <phase>test</phase>
    <phase>prepare-package</phase>
    <phase>package</phase>
    <phase>pre-integration-test</phase>
    <phase>integration-test</phase>
    <phase>post-integration-test</phase>
    <phase>pre-application-test</phase>
    <phase>application-test</phase>
    <phase>post-application-test</phase>
    <phase>pre-system-test</phase>
    <phase>system-test</phase>
    <phase>post-system-test</phase>
    <phase>finalize-tests</phase>
    <phase>install</phase>
    <phase>deploy</phase>
</phases>
Run Code Online (Sandbox Code Playgroud)

以上包含新的应用测试和系统测试阶段(包括前后).

我已经开始了一个测试插件:codezoo-lifecycle-maven-plugin 我用于测试的pom是在src/it文件夹中.

这似乎是新的阶段或有些发现,但有一些奇怪的事情发生:

mvn post-application-test
Run Code Online (Sandbox Code Playgroud)

这有效.还添加了我为测试添加的echo插件.但是有一些警告(使用maven 3.3.9).

mvn install
Run Code Online (Sandbox Code Playgroud)

执行跳过新阶段的默认生命周期.

如果我将生命周期的id"test-levels"更改为"default",则会执行两次阶段.

发出的警告是:

[WARNING] Duplicated lifecycle phase package. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase pre-integration-test. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase integration-test. Defined in default but also in test-levels
....
Run Code Online (Sandbox Code Playgroud)

发出此警告的源代码表示生命周期未正确命名空间.但我无法弄清楚这是怎么做到的.

我在网上找到了一些提示: …

maven-plugin maven maven-lifecycle

10
推荐指数
1
解决办法
1752
查看次数

Jenkins管道中的Maven生命周期-如何最好地分离职责?

在使用jenkins 2(声明性)管道和Maven时,我始终对如何组织管道中的事物以使其可重用和灵活存在问题。

一方面,我想将管道分成逻辑阶段,例如:

pipeline
 {
  stages
   {
    stage('Clean') {}
    stage('Build') {}
    stage('Test') {}
    stage('Sanity check') {}
    stage('Documentation') {}
    stage('Deploy - Test') {}
    stage('Selenium tests') {}
    stage('Deploy - Production') {}
    stage('Deliver') {}
   }
 }
Run Code Online (Sandbox Code Playgroud)

另一方面,我有与

mvn clean deploy site
Run Code Online (Sandbox Code Playgroud)

我可以简单地将Maven拆分为

mvn clean
mvn deploy
mvn site
Run Code Online (Sandbox Code Playgroud)

但是,“部署”包括以下所有生命周期阶段

  • 验证
  • 编译
  • 测试
  • 校验
  • 安装
  • 部署

所以我看了很多例子,例如

sh 'mvn clean compile'
Run Code Online (Sandbox Code Playgroud)

sh 'mvn test'
Run Code Online (Sandbox Code Playgroud)

这导致第二次重复验证和编译步骤,并以此方式浪费“时间/资源”。这可以通过做一个解决

sh 'mvn surefire:test'
Run Code Online (Sandbox Code Playgroud)

而不是再次运行整个生命周期。

所以我的问题是-在詹金斯油耗阶段和Maven生命周期之间取得最佳平衡的最佳方法是什么?对我来说,我看到两种方式:

  1. 将Maven生命周期划分为尽可能多的流水线阶段-这将产生更好的詹金斯用户反馈(请参阅哪个阶段失败等)。
  2. 让maven做所有事情,只使用jenkins管道处理maven的结果(即分析单元测试结果等)。

还是我误解了CI / CD实践中的某些内容?

maven-3 maven jenkins maven-lifecycle jenkins-pipeline

7
推荐指数
1
解决办法
1069
查看次数

如何跳过maven antrun copy/shade:动态阴影目标?

我正在使用maven来配置由多个小服务组成的应用程序.在java中开发的大多数服务共享相同的maven配置,就像在相同的构建生命周期中一样,共享资源(如spring AMQP).

所以我在SuperPom中组织了共享资源.

虽然阴影插件似乎并没有真正干扰安装过程,但是antrun插件当然不会找到它应该复制的任何文件,因为没有通过shade插件创建任何jar文件.

由于我想要在SuperPom中抽象出shade/antrun插件的配置,我需要跳过阴影/复制目标.

我已经试过mvn clean install -Dmaven.shade.skip=true,mvn clean install -Dmaven.copy.skip=true,mvn clean install -Dmaven.shade.shade.skip=true

这是一个小样本供您玩:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>Test</groupId>
    <artifactId>SuperTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <log4j.version>1.2.17</log4j.version>
        <destination>pleasedeleteme</destination>
        <mainpackage>com.uk.cc.it.info.gov.test.xxx</mainpackage>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>${mainpackage}.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin maven-antrun-plugin maven-lifecycle

4
推荐指数
1
解决办法
2833
查看次数

mvn verify 和 mvn test 有什么区别

我对mvn verify阶段有点困惑,我创建了一个 spring 引导项目(简单项目,没有添加明确的配置)。我创建了一些 JUnit 单元测试,它们同时使用mvn verifymvn test命令运行。

mvn verifymvn test命令输出中没有观察到差异。

有人可以解释什么mvn verifymvn test. 还有一些关于 SO 的帖子提到mvn verify运行集成测试。如果是这种情况,那么我有几个问题。

  • maven 如何将特定测试识别为单元测试或集成测试?
  • 如果mvn verify假设只运行集成测试,那么为什么要使用它执行单元测试?

maven maven-lifecycle

3
推荐指数
1
解决办法
2762
查看次数