IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Presto部署到maven私服实战 -> 正文阅读

[Java知识库]Presto部署到maven私服实战

1. 序言

  • 在玩Presto时,最多是mvn clean install -DskipTests
  • 在没有通过MAVEN_OPTS设置为较大内存时,甚至还用上了多线程加速
    • -DskipTests,表示跳过测试
    • -Dmaven.compile.fork=true,表示允许进行多线程编译
    • -T表示多线程,2C表示每核2个线程。假设这是一个64核的服务器,则在进行构建时可以使用 2 * 64 = 128个线程
    mvn -T 2C clean install -DskipTests -Dmaven.compile.fork=true 
    
  • 关于maven的并行构建,可以参考官方文档:Parallel builds in Maven 3
  • 但是,自从接触maven依赖,自己还从没将项目deploy到maven远程仓库(私服)过
  • 在这里记录下,将Presto 0.240版本部署到maven私服遇到问题和解决办法

2. 准备工作

  • 要想将presto部署到私服,需要设置在settings.xml文件中添加私服的server

  • 一般release版本和snapshot版本,有各自的私服server

    <servers>
        <server>
            <id>nexus-releases</id>
            <username>admin</username>
            <password>p@ssword</password>
        </server>
        <server>
            <id>nexus-snapshots</id>
            <username>admin</username>
            <password>p@ssword</password>
        </server>
    </servers>
    
  • 然后,需要在presto-root模块的pom.xml文件的倒数第二行,添加仓库配置

    <!-- 项目打包上传配置 -->
    <distributionManagement>
        <repository>
        	<!-- 这里的id要与server中的id保持一致 -->
            <id>nexus-releases</id>
            <name>Local Nexus Repository</name>
            <url>http://xxx.com/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Local Nexus Repository</name>
            <url>http://xxx.com/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>
    

3. 模块version与父模块保持一致

  • 为了避免与来自maven中央仓库的Presto官方版本的maven坐标冲突,将presto-root(presto项目的父模块和聚合模块)的version从0.240更新为0.240-deploy-SNAPSHOT

    <groupId>com.facebook.presto</groupId>
    <artifactId>presto-root</artifactId>
    <version>0.240-deploy-SNAPSHOT</version>
    <packaging>pom</packaging>
    
  • 使用如下命令进行部署

    mvn clean deploy -DskipTests -Dmaven.compile.fork=true 
    
  • 执行过成功报错:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (checkstyle) on project presto-bm-functions: 
    	Failed during checkstyle execution: Unable to find configuration file at location: src/checkstyle/presto-checks.xml: 
    	Could not find resource 'src/checkstyle/presto-checks.xml'. -> [Help 1]
    
  • 从报错信息看,在执行checkstyle时,presto-bm-functions模块找不到checkstyle的配置文件presto-checks.xml

  • checkstyle的配置文件,位于presto-root模块的src/checkstyle/presto-checks.xml

  • 通过检查presto-bm-functions模块的pom.xml文件发现,该模块指定的父模块presto-root的version还是0.240

    <parent>
        <groupId>com.facebook.presto</groupId>
        <artifactId>presto-root</artifactId>
        <version>0.240</version>
    </parent>
    
  • 错误的version,怎么可能找到父模块presto-root呢?

  • 解决办法: 将所有子模块中定义的presto-root的version都改为0.240-deploy-SNAPSHOT

4. 上传私服时,提示Request Entity Too Large

5. Could not transfer artifact xxx:Network is unreachable

  • 超级奇怪的事情,一直都使用的settings.xml文件,在部署到私服时突然报错
  • 提示到某个仓库的网络不通,无法获取com.sun:tools:pom:1.8
    [ERROR] Failed to execute goal com.hubspot.maven.plugins:dependency-scope-maven-plugin:0.8:check (default) on project presto-main: 
    	Error resolving descriptor for artifact com.sun:tools:1.8: Failed to read artifact descriptor for com.sun:tools:jar:1.8: 
    	Could not transfer artifact com.sun:tools:pom:1.8 from/to nexus-aliyun (http://xxxx/nexus/content/repositories/public/): 
    		Transfer failed for http://xxx/nexus/content/repositories/public/com/sun/tools/1.8/tools-1.8.pom: Network is unreachable (connect failed) -> [Help 1]
    
  • 最开始,还以为是自身的网络问题,等到第二天再试试
  • 第二天还是同样的问题,于是求助同事
  • 负责maven私服的同事说,这个仓库地址是其他领域的仓库地址,这个仓库最近可能出问题了无法使用
  • 建议将其他领域的仓库地址去除,只保留我所在领域的仓库地址,说这个地址应该能满足我所有的需求
  • 照做后,问题得到解决

自己后来总结了下,错误原因如下:

  • 配置的仓库可能存在问题,导致无法访问
  • 服务器网络管控,无法访问外部仓库地址

菜鸟的解决办法:

  • 找一个使用正常的settings.xml配置,照抄作业(当然,感兴趣的大佬可以自己研究研究)

6. presto-server-rpm模块的处理

6.1 关于rpm

  • presto中,除了有presto-server模块,还有一个presto-server-rpm模块
  • 看了presto-server-rpm模块的README.md,大意是:presto-server-rpm模块可以提供RPM包以便使用RPM方式安装Presto

    You can build an RPM package for Presto server and install Presto using the RPM. Thus, the installation is easier to manage on RPM-based systems.

  • 通过上网查阅资料,发现博客《Linux下rpm软件包rpm命令的安装及卸载》是这样介绍RPM的

    RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下软件包的软件。
    Linux 安装时,除了几个核心模块以外,其余几乎所有的模块均通过RPM 完成安装

  • 突然想起来,貌似Linux系统的软件安装包,大多都是以.rpm结尾的,例如JDK的安装除了tar包,还有rpm包
  • 这些rpm包可以使用rpm命令进行安装,只是我们可能习惯了使用yum(CentOS 系统)、 apt-get install(Ubuntu系统)
  • 之所以不直接使用rpm命令,博客《如何在 CentOS Linux 上安装 RPM 软件包》中说,这是因为rpm命令不会解决依赖问题

6.2 deploy时,不部署presto-server-rpm模块

  • 如果不对presto-server-rpm模块的pom.xml文件做任何改动,deloy时target目录将生成.rpm文件
    在这里插入图片描述

  • .rpm文件有800多MB,上传到私服时,会因为Request Entity Too Large问题而部署失败

  • 所以,需要修改presto-server-rpm模块的pom.xml文件,使其不要生成.rpm文件

  • 具体改动如下:

    // 打包方式为rpm,将其注释掉
    <!--<packaging>rpm</packaging>-->
    
    // 注释掉依赖,这是因为之前的presto-server模块并未生成tar.gz包,若不注释掉,编译无法通过
    <!-- <dependency>
        <groupId>com.facebook.presto</groupId>
        <artifactId>presto-server</artifactId>
        <type>tar.gz</type>
        <scope>runtime</scope>
    </dependency> -->
    
    // 注释掉对maven-dependency-plugin插件的配置
    <!-- <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        ......
    </plugin> -->
    
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 17:59:01  更:2022-05-24 18:02:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:33:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码