使用Maven创建多个配置文件jar

问题描述:

我有一个使用单个POM的Maven项目。我有多个配置文件和两个配置文件特定属性文件。使用Maven创建多个配置文件jar

我想创建多个jar文件,每个配置文件id一个。对于这个可加载的jar,我需要添加配置文件特定的属性文件。 罐子不应该拥有所有的依赖关系,只有所有的类文件,以便每个罐子可以作为其他Maven项目中的依赖关系。

问题:

  1. 有没有人这样做过,这可以在Maven的做或做我需要使用antrun建设者?
  2. 如果可以做什么是Maven插件的最佳组合使用?
  3. 我正在生成其名称具有配置文件ID扩展名的属性文件,在将它们添加到jar之前,必须将这些名称更改为默认名称。
  4. 似乎很容易做一个或另一个....只是jar或属性文件...但生成特定的jar与特定的属性文件是最大的痛苦。

任何示例POM XML将不胜感激。

+0

您可以使用多个插件执行此操作,如[本答案](http://*.com/a/12321395/944849)中所述。 – user944849

+0

您需要具有不同的依赖关系,您需要将其关闭。而配置文件是错误的方式。 – khmarbaise

那么,一种做法是通过Maven程序集。

结构:

multi-profile 
| 
+-- pom.xml 
+-- profile-1.properties 
+-- profile-2.properties 
+-- src 
    | 
    +-- assembly 
    | | 
    | +-- profile-1.xml 
    | +-- profile-2.xml 
    | 
    +-- main 
     | 
     +-- java 
      | 
      + ... 

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.example</groupId> 
    <artifactId>multi-profile</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>multi-profile</name> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <build> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
      <execution> 
       <id>create-assembly</id> 
       <phase>package</phase> 
       <goals> 
       <goal>single</goal> 
       </goals> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    </build> 
    <profiles> 
    <profile> 
     <id>profile-1</id> 
     <build> 
     <plugins> 
      <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptors> 
       <descriptor>src/assembly/profile-1.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>true</appendAssemblyId> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>profile-2</id> 
     <build> 
     <plugins> 
      <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptors> 
       <descriptor>src/assembly/profile-2.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>true</appendAssemblyId> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>profile-3</id> 
     <build> 
     <plugins> 
      <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptors> 
       <descriptor>src/assembly/profile-1.xml</descriptor> 
       <descriptor>src/assembly/profile-2.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>true</appendAssemblyId> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 

    </profiles> 
</project> 

一个组件(profile-1.xml,另一种是非常相似):

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 
http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>profile-1</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <files> 
     <file> 
     <source>${project.basedir}/profile-1.properties</source> 
     <outputDirectory>/</outputDirectory> 
     <destName>config.properties</destName> 
     </file> 
    </files> 
    <dependencySets> 
     <dependencySet> 
     <!-- This will exclude any transitive dependencies from being included in your assembly --> 
     <includes> 
      <include>org.example:multi-profile</include> 
     </includes> 
     <useTransitiveDependencies>false</useTransitiveDependencies> 
     <unpack>true</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

如果运行mvn clean install则没有属性文件将被包括在内。如果运行mvn -P profile-3 clean install将在一个单一版本中创建所有配置文件(在单独的工件中)。程序集会根据需要重命名属性文件(在本例中为config.properties)。

如果一些其他的项目需要这些的一个“轮廓建立”作为依赖,只提到这样的:

<dependency> 
    <groupId>org.example</groupId> 
    <artifactId>multi-profile</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>profile-1</classifier> 
</dependency> 

希望它为你工作。

+0

非常感谢@丹尼尔的魅力! –