Maven-ear-plugin - 不包括多个模块,即罐子,战争等

时间:2010-03-16 09:28:31

标签: java maven-2 maven-plugin maven-ear-plugin

我一直在使用Maven EAR插件为新项目创建我的ear文件。我注意到在插件文档中,您可以为模块指定exclude语句。例如,我的插件的配置如下......

  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>2.4.1</version>
        <configuration>
            <jboss>
                <version>5</version>
            </jboss>
            <modules>
                <!-- Include the templatecontroller.jar inside the ear -->
                    <jarModule>
                        <groupId>com.kewill.kdm</groupId>
                        <artifactId>templatecontroller</artifactId>
                        <bundleFileName>templatecontroller.jar</bundleFileName>
                        <includeInApplicationXml>true</includeInApplicationXml>
                    </jarModule>
                    <!-- Exclude the following classes from the ear -->
                    <jarModule>
                       <groupId>javax.activation</groupId>
                       <artifactId>activation</artifactId>
                       <excluded>true</excluded>
                    </jarModule>
                    <jarModule>
                   <groupId>antlr</groupId>
                   <artifactId>antlr</artifactId>
                   <excluded>true</excluded>
                </jarModule>
                ... declare multiple excludes
                <security>
                    <security-role id="SecurityRole_1234">
                        <role-name>admin</role-name>
                    </security-role>
                </security>
            </configuration>
        </plugin>
    </plugins>

对于需要排除4-5个模块的小项目,这种方法绝对没问题。但是,在我的项目中,我有30多个,我们只是刚刚启动项目,因此它的扩展可能会增长。

除了明确声明每个模块的exclude语句之外,是否可以使用通配符或排除所有maven依赖项标志,只包含我声明并排除其他所有模块的模块?有人知道更优雅的解决方案吗?

3 个答案:

答案 0 :(得分:1)

不确定是否支持通配符,但编写自己的mojo非常简单。您可以包装现有的mojo,然后对您自己的设计进行一些任意配置,例如通配符语法。

更好的是,你可以将你的mojo提交给maven团队(!)

答案 1 :(得分:1)

  

除了明确声明每个模块的exclude语句之外,是否可以使用通配符或排除所有maven依赖项标志,只包含我声明的那些模块并排除其他所有模块?

maven-ear-plugin并不提供开箱即用的功能(我认为无论如何都不容易配置,耳朵必须非常精确地打包)。但是,这里不清楚的是如何获得需要排除的依赖项。根据您的答案,可能有几种方法来处理它们:

  • 如果它们是您的工件的依赖项,您可以将它们中的一些声明为可选项,以避免过渡性地检索它们。
  • 您可以将某些依赖项标记为“已提供”(并将它们放在父pom中,只重新声明您在EAR的POM中所需的内容)。

虽然没有看到整个画面但很难回答。

答案 2 :(得分:0)

我遇到了类似的问题。但那是因为我有一个多模块项目,有几个罐子具有提供的范围,我只是从子耳朵pom中删除了父标签,在那里使它独立。然后使用include来包含我需要的罐子。

希望这会有所帮助!!!