Tim*_*ien 75
你可以用个人资料做到这一点......
如果您真的想要使用两个单独的配置文件并自定义JAR插件以包含和排除类和包名称的模式,您可以通过在POM中放置这样的内容来轻松实现:
<profiles>
<profile>
<id>everything</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>only-library</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
旁白:如果这看起来像很多配置,那么多语言Maven对Groovy POM的支持就差不多了.它将大大减少线数.
您可以将它放在pom.xml的末尾(带有项目元素),并添加两个配置文件.第一个配置文件"一切"实际上只是用来演示配置.这个"所有"配置文件是不必要的,因为它只是复制了默认JAR插件jar目标执行的行为.第二个配置文件"only-library"排除任何以"Main"文本开头的包中的任何类.要调用这些配置文件:
mvn package -Peverything
mvn package -Ponly-library
Run Code Online (Sandbox Code Playgroud)
我通过示例对Maven第6章附带的示例应用程序进行了测试,运行这些命令之一将在$ {basedir}/target中生成一个具有分类器的JAR文件.由于JAR插件的jar目标绑定到默认maven生命周期中的包阶段,因此这两个配置文件将修改此插件的配置.
或者,您可以使用两个JAR插件执行来执行此操作...
如果您需要在不使用配置文件的情况下创建两个JAR.您可以多次将JAR插件的jar目标绑定到包生命周期阶段,并为每个已配置的执行使用不同的配置.如果配置两个单独的执行,则每个执行都有一个特定于执行的配置块,因此您可以为每次执行提供唯一标识符和包含/排除模式.
以下是用于将两个自定义JAR添加到生命周期阶段"package"的构建元素.在包装"jar"的项目上执行此操作将导致jar目标运行三次.一旦作为默认的生命周期绑定,然后两次为两个自定义,分类的JAR.
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>only-library</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>everything</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
如果您不是在讨论在每个工件中包含一组不同的类,那么您将需要使用Maven程序集.如果您想了解程序集的详细信息,可以在Maven的答案末尾列出一章:完整参考.坦率地说,我认为这一章并不是一个很好的介绍性参考; 事实上,我有很多报道说这一章几乎是不可读的(我们正在努力解决这个问题).如果您想使用程序集,我建议使用Maven Assembly Plugin的文档.在左侧导航菜单中,您将看到一个示例程序集描述符列表.
免责声明:(请)不要这样做.如果要使用两组不同的类创建两个不同的JAR,我强烈建议您将项目拆分为两个相互依赖的模块.
虽然您可以使用配置文件执行此操作,但您可以更轻松地将项目拆分为两个(实际上是三个).从长远来看,随着应用程序的扩展,您将面临挑战.您将负责确定每个分类JAR中包含的类和包的手册列表.
拥有一个引用两个独立模块的简单父项目的开销很小.如果你看一下免费的Maven by Example书,我们将展示如何在单模块和多模块项目之间进行转换. 第3-5章专注于单个模块项目,第6章介绍如何将这些单个模块组件组合到一个更大的多模块项目中.
欲获得更多信息:
您的问题涉及以下主题,以下是一些链接,它们将为每个主题提供更多详细信息:
Maven JAR插件:http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
多模块Maven项目: 通过实施例的Maven的第6章及的Maven的节3.6.2:完整参考.
Maven生命周期(如果你的包装是"jar",jar就必然打包):Maven的3.5.2节"核心概念"和Maven的第4章:完整参考
Maven程序集:首先是Maven程序集插件站点,然后是Maven的第8章:完整参考资料中的一些重(几乎太重)的细节.
Gle*_*len 23
你的第一个想法是正确的.将2件分成2个项目.
maven的理念是每个项目都应该构建一个唯一的工件(罐子,战争,等等)
你可能一起破解一些东西,这样你只有一个maven项目可以构建2个atrifacts,但这将是一个黑客攻击.
你可以从maven调用ant,所以如果你真的想这样做,那么我建议你开始看看maven ant插件.工件ID是"maven-antrun-plugin"
| 归档时间: |
|
| 查看次数: |
25310 次 |
| 最近记录: |