IDEA打包jar的pom.xml配置

使用IDEA创建spark项目,会用到 pom.xml的配置,现简单做个记录。

1. 固定部分

当我们创建好项目时,会默认生成pom.xml,其中有部分是不需要我们手动更改的:



  4.0.0

  org.example
  algorithm_strategy
  1.0

所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。

节点 描述
project 工程的根标签。
modelVersion 模型版本需要设置为 4.0。
groupId 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。
artifactId 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:org.example:consumer-banking:1.0 org.example:consumer-banking:1.1

2. 引用常量定义

接下来可以为pom定义一些常量,在pom中的其它地方可以直接引用

  
    1.8
    1.8
    UTF-8
    2.11
    2.4.4
    2.11
    2.11.12
  

3. Maven仓库

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

3.1 本地仓库

Maven缺省的本地仓库地址为${user.home}/.m2/repository 。一个用户会对应的拥有一个本地仓库。

可以自定义本地仓库的位置,修改 /usr/local/apache-maven-3.6.3/conf/settings.xml

  
3.2 Maven中央仓库

Maven安装自带了一个远程仓库即Maven中央仓库。具体可在 /usr/local/apache-maven-3.6.3/lib/maven-model-builder-3.6.3.jar文件里的 pom-4.0.0.xml中进行查看。它是所有Maven POM的父POM,所有Maven项目继承该配置。中央仓库的id为central,远程url地址为http://repo.maven.apache.org/maven2,它关闭了snapshot版本构件下载的支持。

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
    
  

我们可以在POM中配置其它的远程仓库,比如下面的中国的中央仓库


...
  
    
      maven-net-cn
      Maven China Mirror
      http://maven.net.cn/content/groups/public/
      
        true
      
      
        false
      
    
  
  
    
      maven-net-cn
      Maven China Mirror
      http://maven.net.cn/content/groups/public/
      
        true
      
      
        false
          
    
  
...

我们也可以在下面添加多个,每个都有它唯一的id,一个描述性的name,以及最重要的,远程仓库的url。此外,true告诉Maven可以从这个仓库下载releases版本的构件,而false告诉Maven不要从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。至于,这是配置Maven从什么地方下载插件构件(Maven的所有实际行为都由其插件完成)。该元素的内部配置和完全一样。

在工作中我们一般都是使用公司局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度。比如我们当前的spark项目配置的远程仓库为 (鉴于公司隐私,其中 url被我替换了下)。

  

    
      Central
      http://nexus.org.example/content/repositories/central
    

    
      Jcenter
      http://nexus.org.example/content/repositories/Jcenter/
    

    
      bili-nexus-release-server
      http://nexus.org.example/content/repositories/releases
    

    
      snapshots
      http://nexus.org.example/content/repositories/snapshots
    

  

4. 项目依赖

由于当前主要基于 XGBoost,所以主要引入相关的依赖。需要注意 scope 的参数,这里的值为 provided,是因为当前的集群环境提供了这些依赖,所以打包的时候可以不用一起打包。但是在本地运行时需要将其注释掉 (此时为默认值:compile)

  
    
    
      org.scala-lang
      scala-library
      ${scala.version}
    
    
    
      org.apache.spark
      spark-core_${scala.binary.version}
      ${spark.version}
      provided
    
    
      org.apache.spark
      spark-sql_${scala.binary.version}
      ${spark.version}
      provided
    
    
      org.apache.spark
      spark-mllib_${scala.binary.version}
      ${spark.version}
      provided
    
    
    
      ml.dmlc
      xgboost4j-spark_${scala.binary.version}
      1.0.0
      
    
  

5. 构建插件

打包成 jar 的配置,maven-assembly-pluginmaven-jar-plugin 配合使用,最后就只会生成一个 xx-jar-with-dependencies.jar

  


    
      
        org.scala-tools
        maven-scala-plugin
        
          
            
              compile
              testCompile
            
          
        
        
          ${scala.version}
          
            -target:jvm-1.5
          
        
      
      
        org.apache.maven.plugins
        maven-assembly-plugin
        3.1.0
        
          
            jar-with-dependencies
          
        
        
          
            make-assemble
            package
            
              single
            
          
        
      
      
        org.apache.maven.plugins
        maven-jar-plugin
        3.0.2
        
          
            default-jar
            none
          
        
      
    
  

6. 参考

  • https://maven.apache.org/pom.html
  • https://www.runoob.com/maven/maven-pom.html
  • https://www.cnblogs.com/panchanggui/p/11009491.html

你可能感兴趣的:(IDEA打包jar的pom.xml配置)