2011-11-23 80 views
27

我有一个用maven编译的项目。我在pom.xml中声明了不同的配置文件。 对于这些配置文件中的一些,我更喜欢构建战争,对于其他配置文件,我更喜欢使用jar。我用手动编辑pom.xml文件和改换包装变要么做之前根据pom中的活动配置文件更改包装

<packaging>war</packaging> 

<packaging>jar</packaging> 

一个

$ mvn clean package -Pchosenprofile 

我怎么能告诉MVN对应包装每个配置文件,所以我不需要编辑pom.xml?

回答

75

如果你想使用模式可使用类似:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    .. 
    <packaging>${packaging.type}</packaging> 

    <profiles> 
     <profile> 
      <id>webapp</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
     </profile> 
     <profile> 
      <id>batch</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
       </profile> 
      </profiles> 
</project> 
+8

那太容易了,太好了,让我微笑。谢谢,即使它迟了一年:)。 – matiasg

1

我不认为你可以。

我能想到的

两种选择:

  • 有包装两个独立的模块,并调用取决于型材其中的一个
  • 有你的模块中的战争和调整生命周期(包含/排除构建步骤)根据配置文件产生的JAR或你的战争

我喜欢第二个更好的办法 - 构建服务器可能会建立两个,和开发人员使用正确的配置文件/设置跳过不必要的类型。

+0

感谢。我更喜欢attachClasses方法,因为它更简单,但在更复杂的情况下,我可能不得不采取这种方式。 – matiasg

+0

attachClasses(或类似的)就是我想到的第2项子弹 - 基本上战争是一个有额外的东西的jar - 而且maven完全有能力同时生成这两个东西 – ptyx

4

你看过了war插件的attachClasses配置设置吗?这个简单的设置可以让你在单一的Maven执行过程中构建一个war和一个jar(默认情况下分类器为“classes”)。

+0

这不是我的想法,但它实际上解决了我的问题,这相当简单。 – matiasg