相对较新的开发人员,尽管我已经使用了一段时间,但我希望能够巩固我的Maven基础知识.我的一部分问题是我没有使用Ant的经验,这似乎来自许多解释的起源.我一直在阅读和观看教程,我一直听到相同的条款:
从我所学到的,似乎生命周期是最广泛的,并且由阶段,插件和/或目标组成(或完成).
问题:您能否提供有关这些术语如何相关的任何信息以及最常见的示例?
越明确,越基本越好!
我有一些依赖于测试数据的集成测试.该测试数据在阶段创建并在阶段中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>
integration-testing maven maven-failsafe-plugin maven-lifecycle
我正在开发一个maven插件,它将用于覆盖默认的maven生命周期,并将使用我的代码.我有多个jar依赖项(eclipse和我的另一个应用程序插件).我有那些罐子的p2回购.如何将这两个集成以解决所有依赖关系?Tycho不能使用,因为它只能用于RCP应用(我的理解/误解).
与此类似 - 问题
还有其他解决方法吗?
我尝试在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>
以上包含新的应用测试和系统测试阶段(包括前后).
我已经开始了一个测试插件:codezoo-lifecycle-maven-plugin 我用于测试的pom是在src/it文件夹中.
这似乎是新的阶段或有些发现,但有一些奇怪的事情发生:
mvn post-application-test
这有效.还添加了我为测试添加的echo插件.但是有一些警告(使用maven 3.3.9).
mvn install
执行跳过新阶段的默认生命周期.
如果我将生命周期的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
....
发出此警告的源代码表示生命周期未正确命名空间.但我无法弄清楚这是怎么做到的.
我在网上找到了一些提示: …
在使用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') {}
   }
 }
另一方面,我有与
mvn clean deploy site
我可以简单地将Maven拆分为
mvn clean
mvn deploy
mvn site
但是,“部署”包括以下所有生命周期阶段
所以我看了很多例子,例如
sh 'mvn clean compile'
和
sh 'mvn test'
这导致第二次重复验证和编译步骤,并以此方式浪费“时间/资源”。这可以通过做一个解决
sh 'mvn surefire:test'
而不是再次运行整个生命周期。
所以我的问题是-在詹金斯油耗阶段和Maven生命周期之间取得最佳平衡的最佳方法是什么?对我来说,我看到两种方式:
还是我误解了CI / CD实践中的某些内容?
我正在使用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> …java maven maven-shade-plugin maven-antrun-plugin maven-lifecycle
我对mvn verify阶段有点困惑,我创建了一个 spring 引导项目(简单项目,没有添加明确的配置)。我创建了一些 JUnit 单元测试,它们同时使用mvn verify和mvn test命令运行。
在mvn verify和mvn test命令输出中没有观察到差异。
有人可以解释什么mvn verify与mvn test. 还有一些关于 SO 的帖子提到mvn verify运行集成测试。如果是这种情况,那么我有几个问题。
mvn verify假设只运行集成测试,那么为什么要使用它执行单元测试?maven ×6
maven-3 ×2
maven-plugin ×2
dependencies ×1
java ×1
jenkins ×1
p2 ×1
pom.xml ×1
tycho ×1