美文网首页
项目自动化构建工具Maven笔记汇总

项目自动化构建工具Maven笔记汇总

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-10-26 16:51 被阅读0次

    Project Object Model(POM):项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。

    面试官问我maven package和install的区别
    将jar文件加到Maven的local repository中
    maven菜鸟笔记

    问题汇总

    plugin maven assembly plugin not found intellij

    在maven settings中勾选Use plugin registry


    对于maven插件飘红解决有效。
    将自己的库放在maven默认库中,使得maven可以默认查找此库

    配置scala-spark maven项目pom.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <!--> groupid:公司或组织的域名倒序+当前项目名称。当前项目名称也即你的全部代码的上一层目录名称 <-->
        <groupId>org.example</groupId>
        <!--> artifactId:当前项目的模块名称,也可以简单设置为当前项目的top目录名称, 也可以自己定义名字 <-->
        <artifactId>project2</artifactId>
        <!--> version:当前模块的版本 <-->
        <version>1.0-SNAPSHOT</version>
        <!--> 如何通过坐标到仓库中查找 jar 包?将上面三个变量连起来:org.example+project2+1.0-SNAPSHOT <-->
        <!--> 以连起来的字符串作为目录结构到仓库中查找: org/example/project2/1.0-SNAPSHOT/preject2-1.0-SNAPSHOT.jar <-->
        <!--> 如果我们直接打包(mvn clean package)的话,则会生成 preject2-1.0-SNAPSHOT.jar 包 <-->
    
    
        <!--> 统一管理所依赖 jar 包的版本,对同一个框架的一组 jar 包最好使用相同的版本。
            为了方便升级框架,可以将 jar 包的版本信息统一提取出来。后面在依赖dependency中则会自动进行变量替换 <-->
        <properties>
            <java.version>1.8</java.version>
            <scala.version>2.12.10</scala.version>
            <scala.main.version>2.12</scala.main.version>
            <spark.version>2.4.0</spark.version>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
    
        <!--> 添加依赖库及其版本 <-->
        <!--> 依赖库也是通过 groupId-artifactId-version 来确定 <-->
        <!--> 此外,还可以添加scope和exclusion相关配置 <-->
        <dependencies>
            <dependency>
                <!--> 添加scala版本依赖 <-->
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <!--> 这里的scala版本使用的是前面统一设置的scala版本 <-->
                <version>${scala.version}</version>
                <!--> 配置该库仅在编译测试时有效(某些库可能在部署环境中已安装,因此不必打包进去) <-->
                <scope>provided</scope>
            </dependency>
            <dependency>
                <!--> 添加spark库 <-->
                <groupId>org.apache.spark</groupId>
                <!--> 设置依赖的spark模块 <-->
                <artifactId>spark-mllib_${scala.main.version}</artifactId>
                <!--> 设置该模块版本 <-->
                <version>${spark.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_${scala.main.version}</artifactId>
                <version>${spark.version}</version>
                <scope>provided</scope>
                <!--如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当 前工程,
                    但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时候将 B 排除 <-->
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                    <exclusion>
                        <artifactId>snappy-java</artifactId>
                        <groupId>org.xerial.snappy</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_${scala.main.version}</artifactId>
                <version>${spark.version}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <artifactId>snappy-java</artifactId>
                        <groupId>org.xerial.snappy</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.typesafe/config -->
            <dependency>
                <groupId>com.typesafe</groupId>
                <artifactId>config</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <!-- tensorflow -->
            <dependency>
                <groupId>org.tensorflow</groupId>
                <artifactId>spark-tensorflow-connector_2.11</artifactId>
                <version>1.15.0</version>
            </dependency>
        </dependencies>
    
    
        <!--构建项目需要的信息 -->
        <build>
            <!-- sourceDirectory设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径 -->
            <sourceDirectory>src/main/scala</sourceDirectory>
            <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
            <testSourceDirectory>src/test/scala</testSourceDirectory>
    
            <!-- 插件列表 -->
            <plugins>
                <plugin>
                    <!-- 该插件用来让maven能够编译、测试、运行scala项目的 -->
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>3.2.2</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <scalaVersion>${scala.version}</scalaVersion>
                    </configuration>
                </plugin>
    
                <plugin>
                    <!-- 打包插件, 有两个 maven-assembly-plugin 和 maven-shade-plugin, 目前网上大都比较推荐maven-shade-plugin -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
        <!--发现依赖和扩展的远程仓库列表 -->
        <repositories>
            <repository>
                <id>repository.xx.com</id>
                <name>xx Repository</name>
                <url>http://maven.xx.virtual/a/repository</url>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>xx-internal-repo</id>
                <name>xx Internal</name>
                <url>http://maven.xx.virtual/a/repository</url>
            </pluginRepository>
        </pluginRepositories>
    </project>
    

    参考:
    https://github.com/wzhe06/SparrowRecSys/blob/master/pom.xml
    https://github.com/martinprobson/Spark-Scala-Maven-Example/blob/master/pom.xml
    maven-assembly-plugin 和 maven-shade-plugin 比较

    相关文章

      网友评论

          本文标题:项目自动化构建工具Maven笔记汇总

          本文链接:https://www.haomeiwen.com/subject/oktaoltx.html