当前位置: 首页 > 面试题库 >

Maven:避免在标准构建生命周期中部署项目包隐含的工件

澹台锐
2023-03-14
问题内容

是否可以避免在 ‘deploy:deploy’ 处理期间 部署 根据项目包装构建的工件?

我的意思是:

  • 假设我们有一个用于Web应用程序的 “ pom.xml ,并将包装类型定义为 “ war”
  • 我们要组装包含应用程序和servlet容器的 .war’ 工件或 .zip’
  • 我们只想在 “ deploy:deploy” 处理过程中部署该 “ * .zip” 工件; __

即,我希望能够运行 “ mvn deploy” 并得到以下结果:

  1. __构造了 “ myapp.war”
  2. __构造了 “ myapp-standalone.zip”
  3. “ myapp-standalone.zip” 已部署到目标远程存储库(请注意,如果此处将 “ myapp.war” 安装到本地存储库,我不会打扰);

我检查了“ war:war文档”并找到了 “ primaryArtifact” 参数。但是,它仅提及本地存储库。

我尝试了以下POM,但它仍将 .war’ .zip’ 部署到远程存储库:

<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>

    <groupId>com.mygroup</groupId>
    <artifactId>myapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>myapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- dependencies go here -->
    </dependencies>

    <build>
        <plugins>
            <! -- plugins like 'compiler' etc -->

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <primaryArtifact>false</primaryArtifact>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>myapp-standalone</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/main/assembly/standalone.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <distributionManagement>
        <repository>
            <-- target repository information -->
        </repository>
        <snapshotRepository>
            <-- target repository information -->
        </snapshotRepository>
    </distributionManagement>
</project>

似乎我可以通过将项目包装声明为 “ pom” 并手动配置 “ war” 包装所隐含的所有mojo (
resources:resources”
“ compiler:compile”“ resources:testResources”
“ compiler:testCompile” 来获得所需的行为) ‘万无一失:测试’‘战争:战争’‘安装:安装’
‘部署:部署’ )。但是,这会使POM变得很冗长,我想避免这种情况。

据我了解,Maven方法是始终将项目包装类型所隐含的工件作为项目工件之一。但是,尚不清楚如果Maven用户想要获得与任何默认打包类型(例如单个 “ * .zip” 归档文件)都不匹配的工件,则该做什么。

有什么想法吗?

问候,丹尼斯


问题答案:

根据Maven Deploy插件文档:

deploy:deploy用于自动安装工件,其pom和特定项目生成的附加工件。[…]

因此,我认为不可能阻止您的战争“按原样”部署。

但是,为了获得理想的效果,您可以在构建中添加一个特定的模块,该模块将负责生产程序集(该程序集取决于war模块),并在war模块中配置deploy插件以如下所示跳过部署:

         <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>X.Y</version>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>


 类似资料:
  • 我下载了Eclipse IDE for Java EE Developers 4.3.2,然后安装了以下插件: Spring工具套件-http://dist.springsource.com/release/TOOLS/update/e4.3/ GWT-http://dl.google.com/eclipse/plugin/4.3 之后,我下载了春罗1.2.5。接下来,我在向导的帮助下创建了一个新

  • 掌握构建生命周期 作为一个构建脚本的开发者,你不应该局限于编写任务动作或者配置逻辑,有时候你想在指定的生命周期事件发生的时候执行一段代码。生命周期事件可以在指定的生命周期之前、之中或者之后发生,在执行阶段之后发生的生命周期事件就该是构建的完成了。 假设你希望在构建失败时能够在开发阶段尽早得到反馈,给构建生命周期事件添加回调有两种方法:一是通过闭包,二是实现 Gradle API 的一个监听接口,G

  • 问题内容: 我大部分时间都是孤独的开发人员,从事许多大型的,主要基于PHP的项目。我想专业化和自动化如何处理对代码库的更改,并创建一个持续集成过程,该过程使过渡到团队工作成为可能,而无需进行基本更改。 我现在正在做的是,每个项目都有一个本地测试环境。我在每个项目中都使用SVN;更改将在本地进行测试,然后通常通过FTP转移到在线版本。API文档是从源代码手动生成的;单元测试是我正在慢慢进行的工作,它

  • 假设我们有一个多模块的项目父模块module1、module2,其中module1依赖于module2。 如果我运行“MVN测试”(而不是“MVN安装”),模块2会看到模块1的变化吗? 提前道谢。

  • 主要内容:生命周期与插件的关系,三套生命周期,clean 生命周期,示例 1,default 生命周期,示例 2,site 生命周期在 Maven 出现之前,项目构建的生命周期就已经存在,开发人员每天都在对项目进行清理,编译,测试及部署,但由于没有统一的规范,不同公司甚至不同项目之间的构建的方式都不尽相同。 Maven 从大量项目和构建工具中学习和反思,最后总结了一套高度完美的,易扩展的生命周期。这个生命周期将项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建过程

  • 我是马文的新手。我正在尝试将一个插件集成到我的构建中,这样它将作为阶段执行的一部分自动执行。 假设我想插入清洁生命周期阶段。 我正在使用的mojo被注释为指定它应该被注入清洁阶段: 这个mojo是按照插件工具Java5注解中的说明安装的。我在pom中添加了插件。xml: 据我所知,在Mojo java代码中使用生命周期绑定可以消除在构建插件中提供执行的需要。对吗? 在调用myclean上面配置的m