Maven:定制包装所有具有特定内容的子模块

时间:2014-01-15 07:56:58

标签: eclipse maven-2

如何在eclipse中剪切maven run配置或编辑父pom.xml,该pom.xml应该执行只包含jar的特定内容的子模块包的创建。

My Project Strucutre:包含六个子模块(jar类型)的父MavenProject(pom类型)

目前我已将maven个人资料概念添加到子模块,如下所示: 我不希望在子模块中添加相同的东西,而是我想在父pom.xml中添加一些东西,它使用特定内容来保护所有子模块

<profiles>
        <profile>
            <id>client</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.4</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <classifier>client</classifier>
                                    <includes>
                                        <include>com/xxx/yyy/zzz/*</include>
                                    </includes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

目录布局:

My Project Structure
    -- ParentProject
    |-- pom.xml
    |-- childmodule 1
    |   |-- src/main/java
    |   |    |-com.pages.abc ->package1
    |   |    |-com.pages.def ->package2
    |   |    |-com.tests.abc ->package3 
    |   |    |-com.tests-def ->package4      
    |   |-- src/main/resources
    |   |    |-resourde folder 
    |   |-- target folder
    |   |-- pom.xml
    |   |   
    |
    |--child modules 2 to 6  (similar structure as childmodule 1)   

我的实际需要是我需要跳过子模块1到5的所有测试包,除了子模块6.我需要创建模块jar,不包括1to5模块的测试包。所以在父pom.xml中添加了配置文件“client”,我能够获得自定义jar,但我也得到了包含所有包的默认jar。罐子存在于目标文件夹中。

2 个答案:

答案 0 :(得分:2)

尝试将以下代码添加到父pom中,并从应该应用它的所有模块中扩展该父代。建议的技巧将检查是否存在源模式(或者,不存在)。

<profiles>
    <profile>
        <id>client</id>

        <file>
            <exists>${basedir}/src/main/java/com/xxx/yyy/zzz/*</exists>
            <!-- Or, alternatively, -->
            <missing>${basedir}/src/main/resources/foo.properties</missing>
            -->
        </file>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classifier>client</classifier>
                                <includes>
                                    <include>**/com/xxx/yyy/zzz/**</include>
                                </includes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

答案 1 :(得分:1)

你有默认的jar和带分类器的jar,因为你已将execution的特定配置添加到package阶段,但maven-jar-plugin已在execution上设置了默认package阶段。

如果在mvn package命令后只需要一个jar,则应调整maven-jar-plugin的默认配置

<profiles>
   <profile>
        <id>client</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <classifier>client</classifier>
                        <includes>
                            <include>com/xxx/yyy/zzz/*</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

或者,作为替代方案,您可以将id标记添加到具有default-jar值的执行中,以仅允许执行maven-jar-plugin

 <profiles>
    <profile>
        <id>client</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <id>default-jar</id>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classifier>client</classifier>
                                <includes>
                                    <include>com/xxx/yyy/zzz/*</include>
                                </includes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>