问题提出
pom.xml中的<packaging>是该项目的打包方式,Maven预设的几种打包方式分别是:
jar/war/ejb/ejb3/rar;打包方式会与Lifecycle做一个绑定,mvn会根据打包的类型来调用不同的插件来完成打包的工作。
比如jar包就会调用maven-jar-plugin的jar任务来打包,war会调用war:war来完成打包
几种默认的Lifecycle绑定(ejb/jar/rar/war):
process-resources |
resources:resources |
compile |
compiler:compile |
process-test-resources |
resources:testResource |
test-compile |
compiler:testCompiler |
package |
ejb:ejb jar:jar rar:rar war:war |
install |
install:install |
deploy |
deploy:deploy
|
但是,我需要自己定义一种打包方式,car包,这种方式是war包的一个中间阶段,这种包除了不包含WEB-INF/lib和web.xml外和war包格式一样的。
几个不同的car可以合并成为同一个war包,这样就可以解决在一个ear包中,导致同一个jar在不同的war中反复被引用的情况。
Maven中自定义Package 类型并绑定Lifecyle的过程是:
- 创建一个Maven 插件工程,package 类型为maven-plugin
- 请参照《Maven Definitive》的关于自定义插件的章节,定义自定义插件的Mojo Goal。
- 在src/main/resources 的目录下,创建文件夹 META-INF/plexus,并在该文件夹下加入文件 components.xml。
- components.xml向Maven的内在容器Plexus Container描述了插件的基本信息。这里有一个Sample,来自maven-magma-plugin的components.xml.
- 在这个文件中,将magma替换为你自定义的打包类型。
- 将你自己写的插件deploy到Repository中,如果要引用自定义打包类型。pom.xml文件需要注意的地方是:
packaging应该自定义的打包类型的名字。
而在plugin的配置的时候,要将extensions设置为true,比如:
<plugin>
<groupId>org.apache.magma.tools</groupId>
<artifactId>maven-magma-plugin</artifactId>
<extensions>true</extensions>
</plugin>
感谢simoneg@apache.org的热情帮助解决我的问题,请大家有关于Maven问题在users@maven.apache.org中提出,这里有很多的热心人。
分享到:
相关推荐
本文将深入探讨“Maven自定义插件小示例”,以帮助开发者更好地理解和利用Maven的强大功能。 Maven插件是Maven生态系统中的一个重要组成部分,它们提供了各种各样的功能,如编译、测试、打包、部署等。有时,标准...
【自定义maven工程 mydepot】是一个专为Java开发者设计的代码框架,它提供了一种规范化的项目结构,便于代码管理和团队协作。Maven是一个强大的项目管理工具,它可以帮助开发者自动化构建、依赖管理和项目信息管理。...
我们将以开发和发布一个名为`test-mvn-plugin`的自定义Maven插件为例进行讲解。 首先,你需要安装一个Maven仓库管理器,如Nexus或Artifactory。这里以Nexus为例,因为它提供了开源版本且功能强大。访问Nexus的官方...
运行`mvn package`命令,Maven会生成一个包含自定义标签库的WAR文件。在其他Java EE应用中,只需将此WAR文件放入`WEB-INF/lib`目录,即可使用自定义标签。 总之,自定义标签是Java EE开发中的一个重要工具,它能...
总的来说,Maven Assembly插件为开发者提供了灵活的打包机制,可以根据项目需求定制不同类型的包。通过学习和掌握这一技能,我们可以更高效地管理和分发我们的Java项目,无论是简单的jar包还是复杂的包含源代码、...
如果需要自定义Maven的行为,如设置代理服务器或指定本地仓库位置,可以在用户主目录下创建`.m2`文件夹,并在其中创建`settings.xml`文件。 总的来说,Apache Maven 3.5.2是Java开发中的重要工具,它简化了项目...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM),能够管理项目的构建、...提供的二进制和源码文件为开发者提供了安装、学习和自定义Maven的基础。
在实际使用中,还可以自定义Maven配置文件(settings.xml),以适应特定的仓库设置、代理配置和本地库路径等。同时,学习如何编写POM.xml文件,理解和运用Maven的坐标系统,是掌握Maven的关键。
2. **conf**:存放Maven的配置文件,如`settings.xml`,该文件允许用户自定义Maven的行为,比如指定本地仓库位置、远程仓库以及镜像设置。 3. **lib**:包含Maven运行所需的库文件,包括各种jar包,这些库支持Maven...
3. **构建项目**: 使用`mvn compile`进行编译,`mvn test`运行测试,`mvn package`打包项目,`mvn install`将项目安装到本地仓库。 4. **部署项目**: 使用`mvn deploy`可以将项目部署到远程仓库,供其他项目使用。 ...
如上述所示,可以定义一个profile来指定JDK的路径,以及自定义的远程仓库地址,这有助于减少从默认中央仓库下载依赖的时间。此外,可以调整更新策略,如将`updatePolicy`设为`never`,避免不必要的依赖检查。 6. **...
最后,`package`阶段会根据项目的打包类型(如JAR或WAR)生成相应的文件,存放在`target`目录下。 3. `mvn install`:此命令在`package`之后,将`target`目录下的打包文件安装到本地Maven仓库。这使得其他本地项目...
可能包括如何自定义Maven的构建过程、如何处理复杂的依赖关系、如何配置插件等实用内容。 总之,Maven3.3.9作为一款强大的Java项目管理工具,通过其标准化的项目结构、依赖管理和自动化构建能力,极大地提高了开发...
这个文件允许用户自定义Maven的行为,比如设置本地仓库路径、远程仓库镜像、代理服务器等。 3. **lib目录**:包含Maven运行所需的库文件,包括各种依赖的JAR包。这些库支持Maven的各种功能,如解析POM、处理插件、...
Maven的生命周期是其核心概念之一,它定义了一系列构建阶段,如编译(compile)、测试(test)、打包(package)、验证(validate)、安装(install)和部署(deploy)。每个阶段由一系列插件目标(plugin goals)...
打开终端,编辑`~/.bash_profile`或`~/.zshrc`文件(根据你的Shell类型),添加以下内容: ``` export M2_HOME=/path/to/apache-maven-3.6.3 export PATH=$M2_HOME/bin:$PATH ``` 其中`/path/to/`应替换为实际...
Maven API允许开发者在代码中调用插件,自定义构建过程。 4. **依赖管理 (Dependency Management)**: Maven API自动处理项目的依赖关系,确保所有依赖项都按照正确的版本和路径引入。通过声明依赖,Maven会自动下载...
在日常开发中,你还可以自定义Maven的配置,比如调整依赖的版本,设置编译源代码的JDK版本,或者创建自己的插件执行特定任务。Maven的可扩展性使其成为Java开发者的得力助手。 总之,Apache Maven 3.9.6为Mac用户...
7. **Maven的设置文件**:用户可以通过`settings.xml`文件自定义Maven的行为,如设置镜像(mirrors)以提高依赖下载速度,配置本地或远程仓库路径,以及定义全局的用户名和密码。 8. **多模块项目**:Maven支持多...
然而,如果我们希望在打包过程中直接将类文件放入`WebContent/WEB-INF/classes`,我们需要自定义Maven的配置。 要实现这一目标,我们需要修改项目的`pom.xml`文件,具体操作如下: 1. **配置`<build>`部分**:在`...