Help Center/ CodeArts Build/ FAQs/ Using Maven for Build/ Using the exec-maven-plugin Extension for Maven and NPM Hybrid Builds
Updated on 2023-11-28 GMT+08:00

Using the exec-maven-plugin Extension for Maven and NPM Hybrid Builds

Symptoms

The Maven project contains front-end code and requires a build with npm. However, the provided Maven image does not contain the npm build environment.

Solution

You can use exec-maven-plugin for hybrid compilation. First configure the plug-in, and then configure the npm environment, and finally run the build task.

  1. Configure the POM file.

    Each npm command is an <execution> in the <executions> tag. You are advised not to configure a proxy or a private npm image repository. Instead, use CodeArts Mirror. The configuration is as follows:

    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.codehaus.mojo</groupId>
    			<artifactId>exec-maven-plugin</artifactId>
    			<executions>
    				<execution>
    					<id>exec-npm-config</id>
    					<phase>prepare-package</phase>
    					<goals>
    						<goal>exec</goal>
    					</goals>
    					<configuration>
    						<executable>npm</executable>
    						<arguments>
    							<argument>config</argument>
    							<argument>set</argument>
    							<argument>registry</argument>
    							<argument>https://mirrors.xxcloud.com/repository/npm/</argument>
    						</arguments>
    						<!-- <workingDirectory>${basedir}</workingDirectory>-->
    					</configuration>
    				</execution>
    
    				<execution>
    					<id>exec-npm-config-4</id>
    					<phase>prepare-package</phase>
    					<goals>
    						<goal>exec</goal>
    					</goals>
    					<configuration>
    						<executable>npm</executable>
    						<arguments>
    							<argument>config</argument>
    							<argument>set</argument>
    							<argument>sass_binary_site</argument>
    							<argument>https://repo.huaweicloud.com/node-sass</argument>
    						</arguments>
    						<!-- <workingDirectory>${basedir}</workingDirectory>-->
    					</configuration>
    				</execution>
    
    				<execution>
    					<id>exec-npm-install</id>
    					<phase>prepare-package</phase>
    					<goals>	
    						<goal>exec</goal>
    					</goals>
    					<configuration>
    						<executable>npm</executable>
    						<arguments>
    							<argument>install</argument>
    						</arguments>
    						<workingDirectory>${basedir}</workingDirectory>
    					</configuration>
    				</execution>
    
    				<execution>
    					<id>exec-npm-run-build</id>
    					<phase>prepare-package</phase>
    					<goals>
    						<goal>exec</goal>
    					</goals>
    					<configuration>
    						<executable>npm</executable>
    						<arguments>
    							<argument>run</argument>
    							<argument>build</argument>
    						</arguments>
    						<workingDirectory>${basedir}</workingDirectory>
    					</configuration>
    				</execution>
    			</executions>
    		</plugin>
    	</plugins>
    </build>

  2. Create a Maven build task.
  3. Add the following npm installation and environment configuration commands to the Maven build task:

    # Create a directory.

    mkdir ./node

    # Run the curl command to download the Node.js software package.

    curl -kv https://mirrors.xxxcloud.com/nodejs/v10.15.3/node-v10.15.3-linux-x64.tar.gz  -o ./node/node-v10.15.3-linux-x64.tar.gz

    Run the tar command to decompress the package:

    1
    tar -zxvf ./node/node-v10.15.3-linux-x64.tar.gz -C ./node
    

    # Configure environment variables.

    export NODEJS_HOME="${WORKSPACE}/node/node-v10.15.3-linux-x64"
    export PATH="${NODEJS_HOME}/bin:${PATH}"

  4. Save the settings and verify the build.