当前位置: 首页 > news >正文

建站之星和凡科建站哪个系统好wordpress菜单定制

建站之星和凡科建站哪个系统好,wordpress菜单定制,建设电子商务网站的必要性,wordpress 修改配置前言 不知道大家在开发的过程中#xff0c;有没有遇到这种场景#xff0c;外部的项目想访问内部nexus私仓的jar#xff0c;因为私仓不对外开放#xff0c;导致外部的项目没法下载到私仓的jar#xff0c;导致项目因缺少jar而无法运行。 通常遇到这种场景#xff0c;常用…前言 不知道大家在开发的过程中有没有遇到这种场景外部的项目想访问内部nexus私仓的jar因为私仓不对外开放导致外部的项目没法下载到私仓的jar导致项目因缺少jar而无法运行。 通常遇到这种场景常用的解法有外部项目跟内部nexus的网络打通比如通过VPN。或者将私仓的jar直接下载下来给到外部项目。对于第二种方案有时候因为私仓的jar里面有依赖其他的内部jar导致要下载多个jar的情况。这时候为了方便我们可能会将这些jar合并成一个大jar再给出去。而目前有些jar都是一些starter会有一些同名的配置文件比如spring.factories。如果不进行处理直接打包就会出现同名配置文件覆盖的情况 本文就是要来聊聊当多个jar合并成一个jar如何解决多个同名配置文件覆盖的情况 解决思路 通过maven-shade-plugin这个插件利用插件的org.apache.maven.plugins.shade.resource.AppendingTransformer来处理处理多个jar包中存在重名的配置文件的合并。他的核心是在于合并多个同名配置文件内容而非覆盖 示例配置如下 buildplugins!-- 防止同名配置文件在打包时被覆盖用来处理多个jar包中存在重名的配置文件的合并参考dubbohttps://github.com/apache/dubbo/blob/master/dubbo-all/pom.xml--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdexecutionsexecutionphasepackage/phasegoalsgoalshade/goal/goalsconfigurationtransformerstransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.factories/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.handlers/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.schemas/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.tooling/resource/transformer/transformers/configuration/execution/executions/plugin 打包后的配置文件的效果如下图 眼尖的朋友应该发现了同名的配置内容是通过追加的方式但仅仅追加其实有时候还满足不了要求比如spring.factories文件他需要达到的效果应该是如下图 后面我通过maven-shade-plugin的官方示例https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html试图想找到解决方案但是有点遗憾没找到。于是在我面前就有两条路一条是放弃maven-shade-plugin插件比如选择其他类似的插件比如maven-assembly-plugin这种方案我试过发现maven-assembly-plugin这个插件的扩展配置比maven-shade-plugin复杂一些于是放弃。最后选择了在maven-shade-plugin基础再扩展一下。 扩展的思路 我并没采用直接修改maven-shade-plugin插件的方式而是在maven-shade-plugin打包后的基础上再进行插件定制。实现的思路也不难就是修改maven-shade-plugin打成jar后的spring.factories文件内容将 调整成形如下即可 自定义maven插件spring-factories-merge-plugin 核心思路 1、如何读取配置文件spring.factories中key重复的内容而不被覆盖 如果是直接使java.util.properties的读取当配置文件中有key重复时比如有多个org.springframework.boot.autoconfigure.EnableAutoConfiguration时最后会出现value值被覆盖的情况。 解决方案我们可以利用org.apacche.commons.configuration.PropertiesConfiguration来进行处理 在项目的pom引入GAV dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-configuration2/artifactIdversion${commons-configuration2}/version/dependency读取配置示例代码 SneakyThrowspublic static MapString, SetString readFactoriesFile(InputStream input) {// 读取 spring.factories 内容//利用PropertiesConfiguration取配置文件中key重复的内容而不被覆盖PropertiesConfiguration properties new PropertiesConfiguration();properties.read(new InputStreamReader(input));MapString, SetString multiSetMap new LinkedHashMap();IteratorString keys properties.getKeys();while(keys.hasNext()) {String key keys.next();String[] values properties.getStringArray(key);SetString collectSet new LinkedHashSet();buildKeyValues(values, collectSet);multiSetMap.put(key,collectSet);}return multiSetMap;}2、如何将修改后的配置文件重新写入jar 我这边的思路就是直接利用IO进行操作了 示例如下 public static void writeFactoriesFile(String factoriesBaseClassPathDir,String finalJarName) throws IOException {String jarFilePath String.format(factoriesBaseClassPathDir /target/ finalJarName).replace(\\, /).replaceAll(//, /);if(!jarFilePath.endsWith(.jar)){jarFilePath jarFilePath .jar;}JarFile jarFile new JarFile(jarFilePath);if(jarFile ! null){ListJarEntry jarFiles jarFile.stream().collect(Collectors.toList()); Cleanup FileOutputStream fos new FileOutputStream(jarFile.getName(), true); Cleanup JarOutputStream jos new JarOutputStream(fos);for (JarEntry jarEntry : jarFiles) {if(jarEntry.getName().startsWith(SpringFactoriesLoader.FACTORIES_RESOURCE_LOCATION)){try { Cleanup InputStream input jarFile.getInputStream(jarEntry);MapString, SetString factoriesMap readFactoriesFile(input);jos.putNextEntry(new JarEntry(jarEntry.getName()));generateFactoriesContent(factoriesMap,jos);} catch (IOException e) {e.printStackTrace();}}else{//表示将该JarEntry写入jar文件中 也就是创建该文件夹和文件jos.putNextEntry(new JarEntry(jarEntry));jos.write(streamToByte(jarFile.getInputStream(jarEntry)));}}}}项目中如何配置插件 buildplugins!-- 防止同名配置文件在打包时被覆盖用来处理多个jar包中存在重名的配置文件的合并参考dubbohttps://github.com/apache/dubbo/blob/master/dubbo-all/pom.xml--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdexecutionsexecutionphasepackage/phasegoalsgoalshade/goal/goalsconfigurationtransformerstransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.factories/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.handlers/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.schemas/resource/transformertransformer implementationorg.apache.maven.plugins.shade.resource.AppendingTransformerresourceMETA-INF/spring.tooling/resource/transformer/transformers/configuration/execution/executions/pluginplugingroupIdcom.github.lybgeek.jar/groupIdartifactIdspring-factories-merge-plugin/artifactIdversion0.0.1-SNAPSHOT/versionexecutionsexecutionphasepackage/phasegoalsgoalspringFactoriesMerge/goal/goals/execution/executionsconfigurationfactoriesBaseClassPathDir${basedir}/factoriesBaseClassPathDirfinalJarName${project.artifactId}-${project.version}/finalJarName/configuration/plugin/plugins/build这边有个小细节是当maven-shade-plugin和spring-factories-merge-plugin的执行生命周期都是相同阶段比如都是在package时则maven-shade-plugin放置顺序得在spring-factories-merge-plugin之前因为spring-factories-merge-plugin是对maven-shade-plugin打包后的结果进行二次加工。如果maven-shade-plugin不放置顺序得在spring-factories-merge-plugin之前则spring-factories-merge-plugin的执行阶段就要比maven-shade-plugin靠后比如maven-shade-plugin在package阶段执行则spring-factories-merge-plugin就得在install或者deploy阶段执行 打包后的效果图如下 总结 之前在看开源框架的时候很经常都是聚焦在源码上而不会去注意一些maven插件这次因为有这打jar的需求。我发现不管是springboot还是dubbo本身就集成一些宝藏插件比如这个maven-shade-plugin插件我就是dubbo那边找到的地址在 https://github.com/apache/dubbo/blob/master/dubbo-all/pom.xml 。比如版本占位符插件flatten-maven-plugin在dubbo和springboot都有看到使用。如果后面有对maven插件由需求推荐可以从springboot或者dubbo那边去搜估计会有意想不到的收获 demo链接 https://github.com/lyb-geek/springboot-learning/tree/master/springboot-jar-merge
http://www.w-s-a.com/news/390550/

相关文章:

  • 忻府网站建设排名网络管理系统官网
  • 张家港外贸网站建设国医堂网站平台建设
  • 水冶那里有做网站的对于网站链接优化有哪些建议
  • 宝安中心地铁站是几号线化妆品网站做的好的
  • 海宁营销型网站设计企业融资是什么意思
  • 淘宝客做网站要钱吗网站开发试题库
  • 10g空间网站做视频网站网站建设找超速云
  • 一元购网站怎么做企业网站源码cms
  • 域名不变 网站改版临沂企业网站建站模板
  • 天河网站建设信科网络外包公司和公司直招哪个好
  • 网站制作哈尔滨聊天系统源码
  • 网站建设朋友圈素材青白江建设网站
  • 红酒网站设计软件设计文档
  • 如何创建网站目录网站申请支付宝接口
  • 网站做区块链然后往里面投钱品牌设计公司收费标准
  • 2022互联网+创新创业项目呼和浩特企业网站排名优化
  • 电子商务类网站建设山西自助建站系统怎么用
  • odoo做网站网站设置专栏有什么好处
  • 局域网内个人网站建设查询企业的网站有哪些
  • 网站建设属于技术开发吗网页制作团队
  • 做家常菜的网站哪个好哪个网站做图片外链
  • 眼科医院网站设计怎么做6深圳宝安是什么风险等级
  • 网站制作容易吗logo免费生成网站
  • 建设厅官方网站下载专区网络托管公司
  • 祥云平台官方网站网线制作实验原理
  • 把网站做成app的软件下载国外做兼职的网站有哪些
  • 网站建设 海豚弯专业的网站开发服务商
  • 那个网站有免费模板中国家装公司十大排名
  • 中铁建设集团有限公司门户网站余杭区建设规划局网站
  • 天猫网站建设的目标是什么做网站常见问题模板