Problem: Maven compilation failure with error like Error: not found: python2

When you compile the project via maven, it failed at module apm-webapp and the following error occured.

Pay attention to key words such as node-sass and Error: not found: python2.

[INFO] > node-sass@4.11.0 postinstall C:\XXX\skywalking\skywalking-ui\node_modules\node-sass
[INFO] > node scripts/build.js

[ERROR] gyp verb check python checking for Python executable "python2" in the PATH
[ERROR] gyp verb `which` failed Error: not found: python2
[ERROR] gyp verb `which` failed     at getNotFoundError (C:\XXX\skywalking\skywalking-ui\node_modules\which\which.js:13:12)
[ERROR] gyp verb `which` failed     at F (C:\XXX\skywalking\skywalking-ui\node_modules\which\which.js:68:19)
[ERROR] gyp verb `which` failed     at E (C:\XXX\skywalking\skywalking-ui\node_modules\which\which.js:80:29)
[ERROR] gyp verb `which` failed     at C:\XXX\skywalking\skywalking-ui\node_modules\which\which.js:89:16
[ERROR] gyp verb `which` failed     at C:\XXX\skywalking\skywalking-ui\node_modules\isexe\index.js:42:5
[ERROR] gyp verb `which` failed     at C:\XXX\skywalking\skywalking-ui\node_modules\isexe\windows.js:36:5
[ERROR] gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:152:21)

[ERROR] gyp verb `which` failed   code: 'ENOENT' }
[ERROR] gyp verb check python checking for Python executable "python" in the PATH
[ERROR] gyp verb `which` succeeded python C:\Users\XXX\AppData\Local\Programs\Python\Python37\python.EXE
[ERROR] gyp ERR! configure error 
[ERROR] gyp ERR! stack Error: Command failed: C:\Users\XXX\AppData\Local\Programs\Python\Python37\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
[ERROR] gyp ERR! stack   File "<string>", line 1
[ERROR] gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
[ERROR] gyp ERR! stack                                ^
[ERROR] gyp ERR! stack SyntaxError: invalid syntax
[ERROR] gyp ERR! stack 
[ERROR] gyp ERR! stack     at ChildProcess.exithandler (child_process.js:275:12)
[ERROR] gyp ERR! stack     at emitTwo (events.js:126:13)
[ERROR] gyp ERR! stack     at ChildProcess.emit (events.js:214:7)
[ERROR] gyp ERR! stack     at maybeClose (internal/child_process.js:925:16)
[ERROR] gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
[ERROR] gyp ERR! System Windows_NT 10.0.17134
......
[INFO] server-starter-es7 ................................. SUCCESS [ 11.657 s]
[INFO] apm-webapp ......................................... FAILURE [ 25.857 s]
[INFO] apache-skywalking-apm .............................. SKIPPED
[INFO] apache-skywalking-apm-es7 .......................... SKIPPED

Reason

It has nothing to do with SkyWalking.
According to https://github.com/sass/node-sass/issues/1176, if you live in countries where requesting resources from GitHub and npmjs.org is very slowly, some precompiled binaries for dependency node-sass will fail to be downloaded during npm install, then npm will try to compile them itself. That’s why python2 is needed.

Resolve

1. Use mirror. Such as in China, please edit skywalking\apm-webapp\pom.xml

Find

<configuration>  
 <arguments>install --registry=https://registry.npmjs.org/</arguments>  
</configuration>

Replace it with

<configuration>  
 <arguments>install --registry=https://registry.npm.taobao.org/ --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/</arguments>  
</configuration>

2. Get an enough powerful VPN