Maven模块订单在同一个配置文件上更改

时间:2017-07-19 11:23:32

标签: maven build maven-profiles

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

mvn clean install -Pdev 

它使用订单构建项目:

  1. 后端,
  2. 前端
  3. 当我使用prod配置文件构建项目时,它会按顺序构建项目:

    1. 前端
    2. 后端
    3. 这是我想要的方式。但是当我运行cmd时

      mvn clean install
      

      它需要使用dev配置文件构建项目,它按顺序执行:1.frontend,2.backend。

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

      <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

       <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>
      

      这里是frontend pom.xml

         <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>
      

      你能帮助我并说明为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

通常这种事情会得到解决,因为你的前端会依赖你后端产生的罐子。

因此,即使它没有编译时依赖性,您仍然可以在provided范围内添加一个:

<dependency>
   <groupId>${project.groupId}</groupId>
   <artifactId>backend</artifactId>
   <version>${project.version}</version>
   <scope>provided</scope>
</dependency>

这将告诉maven reactor它必须首先构建后端,而不更改生成的结果工件。

答案 1 :(得分:0)

  • 首先从backend / pom.xml中删除<activation>标记。我希望您默认只需要一次激活一个配置文件,该配置文件应为dev
  • prod个人资料中删除backend / pom.xml中提到的依赖项。您的fronend项目应取决于backend
  • 在frontend / pom.xml中添加backend依赖项,如下所示(不在任何特定的配置文件中)

代码:

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>backend</artifactId>
  <version>${project.version}</version>
  <scope>provided</scope>
</dependency>

现在尝试以下命令

mvn clean    // (default profile `dev`)
mvn clean --activate-profiles prod     // (with override profile `prod`)