首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven多模块构建中的生命周期阶段

maven多模块构建中的生命周期阶段
EN

Stack Overflow用户
提问于 2012-10-17 06:34:05
回答 2查看 2.8K关注 0票数 2

我已经定义了一个maven多模块构建,其中一个模块仅用于生成源。它不会编译、测试或打包,也不会创建除生成源文件之外的任何工件。

我还没有找到一种只在生成器模块上执行到generate-sources的阶段的方法,不管我在启动多模块构建时指定了哪个阶段。有一些解决方案可以跳过不想要的阶段,但这不是一个真正的选择,因为只有其中许多阶段。

对于那些想知道为什么我会想要的人来说:构建使用tycho和fornax oaw插件,所以我不得不将构建分成两个单独的pom文件,并使用一个多模块构建文件来“一起”执行它们。

EN

回答 2

Stack Overflow用户

发布于 2012-10-25 15:06:50

在看了你的latest question后,我想我可以为你找到一个解决方案。

我想您所有的../projectN/generate/pom.xml都有顶部的pom作为父级,但是我建议您创建一个特殊的generate-parent pom,其中包含一个特殊的插件管理,它可以跳过所有的阶段。

在顶层创建一个名为generate-parent的额外文件夹:

代码语言:javascript
复制
<modules>
    <module>../generate-parent/pom.xml</module> <!-- NEW FOLDER WITH POM -->
    <module>../project1/generate/pom.xml</module>
    <module>../project1/pom.xml</module>
    <module>../project2/generate/pom.xml</module>
    <module>../project2/pom.xml</module>
    <!-- and many more projects with or without generate sub modules -->
</modules>

这个新pom将像往常一样从父pom继承,但只添加一些额外的插件管理:

代码语言:javascript
复制
<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>

    <parent>
        <groupId>your-group</groupId>
        <artifactId>your-parent-pom-artifact-id</artifactId>
        <version>your-parent-version</version>
    </parent>

    <artifactId>generate-parent</artifactId>
    <packaging>pom</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <id>default-resources</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>default-testResources</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <executions>
                        <execution>
                            <id>default-compile</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>default-testCompile</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.7.2</version>
                    <executions>
                        <execution>
                            <id>default-test</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>
                        <execution>
                            <id>default-jar</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>
                        <execution>
                            <id>default-install</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.5</version>
                    <executions>
                        <execution>
                            <id>default-deploy</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

现在,使用这个pom,所有默认阶段都将被禁用。

现在,在所有中使用这个pom。上面的pom继承了您在父pom中拥有的好东西的,但是只是添加了这些特殊的插件管理部分,这些插件在generate-sources之后禁用了各个阶段。

project1/generate/pom.xml

代码语言:javascript
复制
<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>

    <parent>
        <groupId>your-group</groupId>
        <artifactId>generate-parent</artifactId>
        <version>your-parent-version</version>
        <relativePath>../../generate-parent</relativePath>
    </parent>

    ...
    The rest of your pom
    ...
</project>

这将有效地做你想做的事情,generate-parent是一个中间的人,它为这些生成的项目添加了你想要的所有插件管理。

票数 2
EN

Stack Overflow用户

发布于 2012-10-18 17:05:44

据我所知,这是关于使用Xtext创建在maven构建中调用的代码生成器。我认为你需要把你的项目再分开一点。当您更改语法时,您只需要构建生成器。因此,最好有一个包含生成器的独立项目(而不是模块)。您可以构建生成器并将其部署到maven存储库。在您的正常构建中,您使用fornax-oaw-m2插件在generate-sources阶段生成源代码,就像您现在所做的那样。您只需要将生成器作为fornax-oaw-m2插件的依赖项。

编辑:

因此,回到您想要构建的多模块项目:我建议有一个模块,它只包含您生成源的资源,而不包含其他任何资源。另一个java sourcec应该包含在它们自己的模块中。然后,我可以为使用生成器提出两个备选方案:

  1. 在模块中运行生成器,其中包含生成源的资源,并适当地设置相对路径。
  2. 在模块中运行生成器,该生成器应包含生成的源,并将该模块与资源作为依赖项(在生成资源之前可能需要解压该依赖项)。

您仍然总是在generate-sources阶段生成。在第二种选择中,如果您需要生成一组不同模块的源,fornax-oaw-m2插件的配置将被复制。但我认为这更像是maven的方式,因为您只需要更改当前正在构建的项目。在第一种选择中,您必须声明来自模块的依赖项,其中源被生成到执行源生成的模块。这看起来有点尴尬。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12928465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档