如果你不是在谈论在每个工件中包含一组不同的类,那么你认为这个特定的章节是一个很好的介绍性参考;事实上,我've had numerous reports that this chapter is nearly unreadable (and we'正在努力解决这个问题 . 如果您想使用组件,我建议使用Maven Assembly Plugin's documentation . 在左侧导航菜单中,您将看到一个示例程序集描述符列表 .
Disclaimer: (Please) don't do this. If you are creating two difference JARs with two different set of classes I strongly recommend that you split the project up into two interdependent modules.
3 回答
你的第一个想法是正确的 . 将2件分成2个项目 .
maven的理念是每个项目都应该构建一个唯一的工件( jar ,战争,等等)
你可能一起破解一些东西,这样你只有一个maven项目可以构建2个atrifacts,但这将是一个黑客攻击 .
你可以从maven调用ant,所以如果你真的想这样做,那么我建议你开始看看maven ant插件 . 工件ID是“maven-antrun-plugin”
You could do this with profiles...
如果您真的想要使用两个单独的配置文件并自定义JAR插件以包含和排除类和包名称的模式,您可以通过在POM中放置这样的内容来轻松实现:
您可以将它放在pom.xml的末尾(带有项目元素),并添加两个配置文件 . 第一个配置文件“一切”实际上只是用来演示配置 . 这个“所有”配置文件是不必要的,因为它只是复制了默认JAR插件jar目标执行的行为 . 第二个配置文件“only-library”排除任何以“Main”文本开头的包中的任何类 . 要调用这些配置文件:
我针对Chapter 6 of Maven by Example附带的示例应用程序对此进行了测试,并且运行这些命令中的任何一个将在$ / target中生成具有分类器的JAR文件 . 由于JAR插件的jar目标绑定到默认maven生命周期中的包阶段,因此这两个配置文件将修改此插件的配置 .
Or, you could do this with two JAR plugin executions...
如果您需要在不使用配置文件的情况下创建两个JAR . 您可以多次将JAR插件的jar目标绑定到包生命周期阶段,并为每个已配置的执行使用不同的配置 . 如果配置两个单独的执行,则每个执行都有一个特定于执行的配置块,因此您可以为每个执行提供唯一标识符和包含/排除模式 .
以下是用于将两个自定义JAR添加到生命周期阶段“package”的构建元素 . 在包装“jar”的项目上执行此操作将导致jar目标运行三次 . 一旦作为默认的生命周期绑定,然后两次为两个自定义,分类的JAR .
如果你不是在谈论在每个工件中包含一组不同的类,那么你认为这个特定的章节是一个很好的介绍性参考;事实上,我've had numerous reports that this chapter is nearly unreadable (and we'正在努力解决这个问题 . 如果您想使用组件,我建议使用Maven Assembly Plugin's documentation . 在左侧导航菜单中,您将看到一个示例程序集描述符列表 .
Disclaimer: (Please) don't do this. If you are creating two difference JARs with two different set of classes I strongly recommend that you split the project up into two interdependent modules.
虽然您可以使用配置文件执行此操作,但您可以更轻松地将项目拆分为两个(实际上是三个) . 从长远来看,随着应用程序的扩展,您将面临挑战 . 您将负责确定每个分类JAR中包含的类和包的手册列表 .
拥有一个引用两个独立模块的简单父项目的开销很小 . 如果你看一下免费的Maven by Example书,我们将展示如何在单模块和多模块项目之间进行转换 . Chapters 3-5专注于单个模块项目,Chapter 6向您展示如何将这些单个模块组件组合到一个更大的多模块项目中 .
For more information:
您的问题涉及以下主题,以下是一些链接,它们将为每个主题提供更多详细信息:
Maven JAR插件:http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
多模块Maven项目:Chapter 6 of Maven by Example和Section 3.6.2 of Maven: The Complete Reference .
Maven生命周期(如果你的包装是"jar",jar必须打包):Section 3.5.2 of Maven by Example "Core Concepts"和Chapter 4 of Maven: The Complete Reference
Maven装配:首先是Maven Assembly Plugin site,然后是Chapter 8 of Maven: The Complete Reference,用于一些沉重(几乎太重)的细节 .
你有两个选择:
Profiles
Assemblies
如果子集只是资源的集合,那么我不会将它作为单独的模块 .
如果项目始终依赖于以统一方式打包的子集,则子集是成为module的良好候选者 .
如果子集在多个不同的"flavours"中重新打包,那么我将为每个"flavour"定义程序集,并使用"classifier"参见maven coordinates来限定工件名称 .
最后,您可以使用配置文件来确定生成哪些程序集,您的默认配置文件可能只会创建开发期间所需的初始工件"flavour" .
一旦开发完成,"full"配置文件可以生成工件的所有"flavour"变体以进行最终部署 .