首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven模块在同一配置文件上的顺序更改

Maven模块在同一配置文件上的顺序更改
EN

Stack Overflow用户
提问于 2017-07-19 11:23:31
回答 2查看 431关注 0票数 0

我有一个项目,它有3个pom文件,和2个maven配置文件:prod和dev。问题是,当我使用cmd运行我的dev配置文件时

代码语言:javascript
复制
mvn clean install -Pdev 

它按照以下顺序构建项目:

  1. 后端,
  2. 前部

当我用prod配置文件构建项目时,它按照顺序构建项目:

  1. 前部
  2. 后端

这就是我想要的方式。但是当我运行cmd时

代码语言:javascript
复制
mvn clean install

它需要使用dev配置文件构建项目,而且它可以这样做:1.前端,2.后端。

这就是问题所在,它改变了模块的顺序。这里是主要的pom.xml

代码语言:javascript
复制
<groupId>com.main</groupId>
<artifactId>Main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Main</name>
<description>Main Parent Project</description>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<modules>
    <module>backend</module>
    <module>frontend</module>
</modules>

下面是后端pom.xml

代码语言:javascript
复制
 <artifactId>backend</artifactId>
<name>backend</name>
<description>Backend Project</description>



<parent>
    <groupId>com.main</groupId>
    <artifactId>Main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>



<dependencies>
 ...
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
                <profiles>${spring-profiles}</profiles>
            </configuration>
        </plugin>
    </plugins>
</build>
<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <build.profile.id>dev</build.profile.id>
            <profileActive>dev</profileActive>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <build.profile.id>prod</build.profile.id>
            <profileActive>prod</profileActive>
        </properties>
            <dependencies>
                <dependency>
                    <groupId>com.main</groupId>
                    <artifactId>frontend</artifactId>
                    <version>${project.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
    </profile>
</profiles>

这里是前端pom.xml

代码语言:javascript
复制
   <artifactId>frontend</artifactId>
<name>frontend</name>
<description>Frontend Project</description>

<parent>
    <groupId>com.main</groupId>
    <artifactId>Main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<build>
    <plugins>
        <plugin>
            <groupId>com.github.eirslett</groupId>
            <artifactId>frontend-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <workingDirectory>src/main/webapp</workingDirectory>
                <nodeVersion>v6.0.0</nodeVersion>
                <npmVersion>2.7.1</npmVersion>
                <nodeDownloadRoot>https://nodejs.org/dist/</nodeDownloadRoot>
                <npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
            </configuration>
            <executions>
                <execution>
                    <id>install node and npm</id>
                    <goals>
                        <goal>install-node-and-npm</goal>
                    </goals>
                    <phase>generate-resources</phase>
                </execution>
                <execution>
                    <id>npm install</id>
                    <goals>
                        <goal>npm</goal>
                    </goals>
                    <configuration>
                        <arguments>install</arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>npm rebuild node-sass</id>
                    <goals>
                        <goal>npm</goal>
                    </goals>

                    <configuration>
                        <arguments>rebuild node-sass</arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>bower install</id>
                    <goals>
                        <goal>bower</goal>
                    </goals>
                    <configuration>
                        <arguments>install</arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>gulp</id>
                    <goals>
                        <goal>gulp</goal>
                    </goals>
                    <phase>generate-resources</phase>
                    <configuration>

                            <arguments>${gulpProfile}</arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>
<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <build.profile.id>dev</build.profile.id>
            <profileActive>dev</profileActive>
            <gulpProfile>-d</gulpProfile>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <build.profile.id>prod</build.profile.id>
            <profileActive>prod</profileActive>
            <gulpProfile>-p</gulpProfile>
        </properties>
    </profile>
</profiles>

你能帮我说出为什么会这样吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-19 11:43:56

通常,这种事情是解决的,因为您的前端将依赖于您的后端产生的罐子。

因此,即使它没有编译时依赖性,仍然可以在provided作用域添加一个:

代码语言:javascript
复制
<dependency>
   <groupId>${project.groupId}</groupId>
   <artifactId>backend</artifactId>
   <version>${project.version}</version>
   <scope>provided</scope>
</dependency>

这将告诉maven反应堆,它必须始终首先构建后端,而不更改生成的工件。

票数 0
EN

Stack Overflow用户

发布于 2017-07-19 15:33:09

  • 首先,从后端/put.xml中删除<activation>标记。我希望默认情况下一次只需要保持一个概要文件是活动的,并且应该是dev
  • prod配置文件中删除后端/put.xml中提到的依赖项。您的fronend项目应该依赖于backend
  • 按照下面的方式将backend依赖项添加到前端/头文件中(而不是在任何特定的配置文件中)

代码:

代码语言:javascript
复制
<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>backend</artifactId>
  <version>${project.version}</version>
  <scope>provided</scope>
</dependency>

现在尝试下面的命令

代码语言:javascript
复制
mvn clean    // (default profile `dev`)
mvn clean --activate-profiles prod     // (with override profile `prod`)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45189099

复制
相关文章

相似问题

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