frontend-maven-plugin插件问题解决
1.插件介绍
frontend-maven-plugin为项目本地下载/安装Node和NPM,运行npm install命令 。
它适用于Windows,OS X和Linux。
这个插件也可以下载Node和Yarn,
然后运行yarn install你的项目。
使用这个插件目的:
- 让你的前端和后端版本尽可能分开,通过减少它们之间的交互量到最低限度; 仅使用1个插件。
- 让您在构建过程中使用Node.js及其库,而无需为构建系统全局安装Node / NPM
- 让您确保在每个构建环境中运行的Node和NPM的版本是相同的
2.插件使用示例
我所在的项目security-admin/pom.xml配置如下:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<workingDirectory>${project.build.directory}</workingDirectory>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
</configuration>
</execution>
<execution>
<phase>prepare-package</phase>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
</executions>
</plugin>
3.离线环境打包问题解决方法
该插件在打包security-admin工程时,
要求联网下载文件,并且之后的npm需要连接远程仓库,
而我们的工程是在内网打包的,不能随意连接外网,
从而会导致打包失败。
使用的打包测试命令:
mvn package -pl security-admin -am -DskipTests
离线打包的解决方法有两种:
3.1.修改downloadRoot改变下载的地址,使用国内或者内网URL:
下载node-v8.12.0-linux-x64.tar.gz安装包,默认连接如下网址:
<!-- optional: where to download node and npm from. Defaults to https://nodejs.org/dist/ -->
<downloadRoot>https://nodejs.org/dist/</downloadRoot>
https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.gz
3.1.1.如果无法连接国外网址,可以使用国内淘宝的网址:
<downloadRoot>http://npm.taobao.org/mirrors/node/</downloadRoot>
http://npm.taobao.org/mirrors/node/v8.12.0/node-v8.12.0-linux-x64.tar.gz
downloadRoot的配置参考如下:
<execution>
<phase>prepare-package</phase>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
<downloadRoot>http://npm.taobao.org/mirrors/node/</downloadRoot>
</configuration>
</execution>
注意downloadRoot不支持本地文件目录
3.1.2.如果国内网址也无法使用,只能连接内网
可以使用本地启动tomcat的方式,将要下载的安装包提前下好,
放到tomcat的webapp目录下,启动tomcat提供下载服务,
详细步骤请参考:
使用tomcat搭建HTTP文件下载服务器
然后将downloadRoot改为tomcat服务的路径,从tomcat下载相应的包,解决问题。
3.2.使用本地目录缓存,则不需要联网下载
查看打包过程发现如下日志:
[INFO] Downloading https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.gz to /home/maven/repository/com/github/eirslett/node/8.12.0/node-8.12.0-linux-x64.tar.gz
插件从指定网址下载node-v8.12.0-linux-x64.tar.gz下载文件到本地缓存目录后,
并且改名为node-8.12.0-linux-x64.tar.gz,
当每次开始编译时,插件会先查看缓存目录文件是否已经存在,
存在则不会重新下载,不存在才会去联网,
所有可以先从其他路径获取需要的安装包文件,
手动把node-v8.12.0-linux-x64.tar.gz放到对应的目录:
/home/maven/repository/com/github/eirslett/node/8.12.0/
具体操作如下:
下载安装包node-v8.12.0-linux-x64.tar.gz:
https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.gz
创建目录:
mkdir -p /home/maven/repository/com/github/eirslett/node/8.12.0/
上传安装包:
ftp node-v8.12.0-linux-x64.tar.gz /home/maven/repository/com/github/eirslett/node/8.12.0/
并且改名,去掉名字中的v:
mv node-v8.12.0-linux-x64.tar.gz node-8.12.0-linux-x64.tar.gz
上面需要的npm进行同样的操作即可:
[INFO] Downloading https://registry.npmjs.org/npm/-/npm-6.4.1.tgz to /home/maven/repository/com/github/eirslett/npm/6.4.1/npm-6.4.1.tar.gz
mkdir -p /home/maven/repository/com/github/eirslett/npm/6.4.1/
mv npm-6.4.1.tgz npm-6.4.1.tar.gz
3.3.npm使用内网的制品库作为远程仓库地址
在pom中插件的配置项中增加如下两个配置项:
vim security-admin/pom.xml
<npmRegistryURL>https://10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual</npmRegistryURL>
<arguments>install --strict-ssl=false</arguments>
3.3.1.如果未 设置npmRegistryURL则会报如下错误,因为内网无法访问到外网远程仓库:
[INFO] --- frontend-maven-plugin:1.6:npm (npm install) @ security-admin-web ---
[INFO] Running 'npm install' in /home/compile/ranger/security-admin/target
[ERROR] npm ERR! code ENOTFOUND
[ERROR] npm ERR! errno ENOTFOUND
[ERROR] npm ERR! network request to https://registry.npmjs.org/requirejs failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
[ERROR] npm ERR! network This is a problem related to network connectivity.
[ERROR] npm ERR! network In most cases you are behind a proxy or have bad network settings.
[ERROR] npm ERR! network
[ERROR] npm ERR! network If you are behind a proxy, please make sure that the
[ERROR] npm ERR! network 'proxy' config is set properly. See: 'npm help config'
[ERROR]
[ERROR] npm ERR! A complete log of this run can be found in:
[ERROR] npm ERR! /root/.npm/_logs/2018-10-15T08_23_03_167Z-debug.log
[INFO] -------------------------------------------------------------------
3.3.2.改为内网的仓库后,还是报错,无法解析返回的html文件:
17 http fetch GET 200 https://10.41.103.97:443/artifactory/public-npm-remote-cache/requirejs 64ms
18 silly fetchPackageMetaData error for requirejs@^2.3.6 Unexpected token < in JSON at position 0 while parsing near '<!DOCTYPE HTML PUBLI...'
查看淘宝的npm返回结果,返回的是一个json文件,里面记录了版本信息:
https://registry.npm.taobao.org/requirejs
查看资料后,发现如下URL会返回josn格式的结果:
https://10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual/requirejs
所以npmRegistryURL配置如下:
<npmRegistryURL>https://10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual</npmRegistryURL>
3.3.3.如果不配置设置strict-ssl为false,则打包时会报证书不存在错误:
23 verbose stack FetchError: request to https://10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual/requirejs failed, reason: Hostname/IP doesn't match certificate's altnames: "IP: 10.41.103.97 is not in the cert's list: "
设置strict-ssl为false关闭强制SSL检查:
<arguments>install --strict-ssl=false</arguments>
实际上这个参数执行一次就会改变全局变量,
但是重复执行也没有问题,可以写入到pom中执行,
防止第一次编译的时候没有该配置项导致失败。
frontend-maven-plugin插件问题解决的更多相关文章
- eclipse maven plugin 插件 安装 和 配置
离线插件 点击下载离线安装包:eclipse-maven-plugin.zip ( for eclipse helios or higher ) .解压缩到任意目录(如这里的plugins目录): ...
- Maven plugin插件---appassembler-maven-plugin快速配置
使用appassembler-maven-plugin 打包自定义目录 1.Pom中添加 <plugin> <artifactId>maven-resources-plugin ...
- Maven plugin 插件
1.maven-surefire-plugin简介: Maven在构件时执行到测试的生命周期时,会使用maven-surefire-plugin运行测试用例,背后执行的Junit或者TestNG的测试 ...
- Spring Boot Maven Plugin(二):run目标
简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...
- Spring Boot Maven Plugin(一):repackage目标
简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...
- Versions maven plugin 修改版本
使用versions maven plugin插件,批量修改项目各模块的版本号,灵活推进或回退版本,避免主干每次更新代码,立即对所有分支产生影响. https://blog.csdn.net/sunz ...
- maven release plugin插件
1.打包版本区别 SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支) ...
- Spring Boot的Maven插件Spring Boot Maven plugin详解
Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Mave ...
- Maven - 深入理解maven构建生命周期和各种plugin插件
作者:亚当-adam 来源:CSDN 原文:https://blog.csdn.net/zhaojianting/article/details/80321488 版权声明:本文为博主原创文章,转载请 ...
- Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告
最近在做基于jenkins ant junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...
随机推荐
- 【Java 设计】如何优雅避免空指针调用
空指针引入 为了避免空指针调用,我们经常会看到这样的语句 if (someobject != null) { someobject.doCalc();} 最终,项目中会存在大量判空代码,多么丑陋繁冗! ...
- Django auth
auth是django一个自带的用户验证系统,使用它可以减少我们的开发流程. 基本使用 大体流程: 自定义类 from django.contrib.auth.models import Abstra ...
- ctypes与numpy.ctypeslib的使用
numpy ctypeslib 与 ctypes接口使用说明 作者:elfin 目录 一.numpy.ctypeslib使用说明 1.1 准备好一个C++计算文件 1.2 ctypeslib主要的五个 ...
- [PROC FREQ] 单组率置信区间的计算
本文链接:https://www.cnblogs.com/snoopy1866/p/15674999.html 利用PROC FREQ过程中的binomial语句可以很方便地计算单组率置信区间,SAS ...
- shell脚本 系统状态信息查看
一.简介 源码地址 日期:2018/6/23 介绍:显示简单的系统信息 效果图: 二.使用 适用:centos6+,ubuntu12+ 语言:中文 注意:无 下载 wget https://raw.g ...
- 初探Windows用户态调试机制
我们在感叹Onlydbg强大与便利的同时,是否考虑过它实现的原理呢? 作为一个技术人员知其然必知其所以然,这才是我们追求的本心. 最近在学习张银奎老师的<软件调试>,获益良多.熟悉Wind ...
- box-shadow(盒子阴影)
box-shadow 属性可以设置一个或多个下拉阴影的框 可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开.该属性可设置的值包括阴影的X轴偏移量.Y轴偏移量.模糊半径.扩散半径和颜色. 语法: ...
- 3、回溯算法解题套路框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- 注解版mybatis动态语句将空字符串转换为null
Convert.java import java.util.Map; import java.util.Objects; /** * * @ClassName: Convert * @Descript ...
- JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载
这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...