【idea实用系列4】使用Maven构建Scala项目

9 篇文章 0 订阅
7 篇文章 0 订阅

【maven系列2】使用Maven构建Scala项目

简介

Maven是一个构建/项目管理工具。它倾向于“约定优于配置”,可以极大地简化构建过程。通过查看项目的pom.xml文件,Maven用户通常可以了解项目的结构和配置信息。Maven采用插件化架构,方便在项目中添加新的库和模块。您可以从中央仓库等资源库下载这些“artifacts”。

您也可以查看官方示例项目,该项目使用我们将在这里展示的Scala Maven插件。

Scala Maven插件

我们将使用Scala Maven插件(GitHub repo, website)来构建Scala项目。Scala Maven插件是目前最流行的Scala项目构建插件。注意:该插件会从中央仓库自动下载Scala,因此如果您使用Maven进行编译,则无需手动安装Scala。

获取Maven

Linux(Debian)

对于Debian及其派生系统,可以通过apt-get命令安装Maven。只需执行以下命令即可:(sudo) apt-get install maven。

OSX

在OSX 10.9(Mavericks)之前的版本中,Maven 3已经内置。如果没有安装,可以使用MacPorts、Homebrew或Fink等软件包管理器进行安装。Scala Maven插件需要Maven 3.0+

手动安装(Red Hat Linux、OSX、Windows)

您可以从Apache官网下载Maven。下载后解压缩(使用tar -zxvf apache-maven-X.X.X-bin.tar.gz命令,或使用7-zip等工具),将其放置在您选择的目录中(对于类Unix系统如Linux和OSX,我喜欢将其放在/opt/下;对于Windows,我可能会放在C:/下)。然后,需要将Maven添加到环境变量Path中:

  • Linux/OSX(选项1):创建一个符号链接指向/usr/bin目录,因为该目录已经在您的Path中。

    ln -s /usr/bin/mvn /opt/apache-maven-X.X.X/bin/mvn 
    
  • Linux/OSX(选项2):直接将Maven的bin目录添加到您的path中,在您的shell配置文件(例如~/.bash_profile)中添加以下内容:

    export PATH=$PATH:/opt/apache-maven-X.X.X/bin
    

    示例:echo "export PATH=$PATH:/opt/apache-maven-X.X.X/bin" >> ~/.bash_profile

  • Linux/OSX(选项3):在现有路径位置创建一个mvn shell脚本。
    假设您的路径中包含 H O M E / b i n ,将您提取的文件夹放入 HOME/bin,将您提取的文件夹放入 HOME/bin,将您提取的文件夹放入HOME/bin中(例如mv apache-maven-X.X.X "$HOME/bin/")。然后,在 H O M E / b i n 中创建一个名为 m v n 的文件,并将以下内容添加到该文件中: " ‘ HOME/bin中创建一个名为mvn的文件,并将以下内容添加到该文件中:"` HOME/bin中创建一个名为mvn的文件,并将以下内容添加到该文件中:"‘HOME/bin/apache-maven-X.X.X/bin/mvn $@"。最后,使用chmod u+x mvn`命令使该脚本可执行。

  • Windows
    点击“开始”菜单,右键点击“My Computer”,然后选择“Properties”。
    这将打开“控制面板 -> 系统和安全 -> 系统”页面,显示您计算机的概述信息。
    在左侧边栏中,应该有四个选项;点击“高级系统设置”(第四个选项)。
    在“高级”选项卡下,点击右下角的“环境变量…”按钮。
    注意:我建议创建/编辑用户变量(顶部框)。您也可以使用系统变量进行相同的操作(底部框)。
    创建一个名为“MAVEN3_HOME”的新变量,将其指向Maven的安装目录(例如C:\apache-maven-X.X.X)。请使用反斜杠以确保路径正确,并且不要在末尾添加斜杠。
    创建一个名为“MAVEN3_BIN”的新变量,将其值设置为“%MAVEN3_HOME%\bin”。
    编辑Path变量:小心不要更改其他内容,只需将“;%MAVEN3_BIN%”追加到变量值末尾。
    您需要重新启动命令行窗口才能使这些更改生效。

创建您的第一个项目

使用“archetype”是创建新项目的最简单方法。原型是一个通用的项目结构模板。遵循“约定优于配置”的原则,Scala Maven插件提供了一个用于Scala项目的原型。

使用以下命令运行archetype插件:

mvn archetype:generate -DarchetypeGroupId=net.alchim31.maven -DarchetypeArtifactId=scala-archetype-simple

如果这是您第一次使用Maven,您会注意到Maven正在下载许多JAR文件。Maven会解析依赖关系并根据需要下载它们(仅下载一次)。此时,Maven正在下载核心插件。

接下来,Maven将要求您提供groupId、artifactId和package等信息。您可以阅读命名规范的指南,但简单来说:

  • groupId:反转的域名(例如com.my-organization)
  • artifactId:项目名称(例如playground-project)
  • version:任何您想要的版本号,但建议遵循语义化版本控制规范(例如0.0.1)
  • package:默认情况下与groupId相同,但您可以自定义(例如com.my-organization)

groupId和artifactId组合在一起应该作为项目的全局唯一标识符。

完成后,您将在当前目录下看到一个以artifactId命名的新文件夹。进入该文件夹,并运行以下命令:

mvn package

您将看到Maven正在下载依赖项,包括Scala库(如上所述),JUnit,ScalaTest和Specs2(后三个是测试框架;原型包含一个示例“Hello world”程序和每个框架的测试)。

原型解释

在项目的根目录中,您将看到一个pom.xml文件、一个src文件夹和一个target文件夹(只有在构建后才会出现)。请注意:原型还包含一个.gitignore文件。

在src文件夹中,您将看到main和test文件夹;main文件夹用于存放应用程序代码,test文件夹用于存放测试套件。在这两个文件夹中,都会有一个scala文件夹,然后是您的包结构(实际上,test/scala文件夹中包含一个示例包,但您应该将其替换为自己的包名和测试代码)。如果您需要同时使用Scala和Java源代码,只需在main或test文件夹下添加一个java文件夹即可。

target文件夹用于存放生成/构建的文件,例如.class和.jar文件。您可以在Maven页面上了解更多关于pom.xml的信息。

示例项目结构:

pom.xml
src
├── main
│   ├── scala
│   │   └── com/my-package/… *.scala
│   └── java
│       └── com/my-package/… *.java
└── test
    ├── scala
    │   └── com/my-package/… *.scala
    └── java
        └── com/my-package/… *.java
target …

您可以在Scala Maven插件的官方网站上了解更多信息。

创建一个Jar文件

默认情况下,Scala Maven插件创建的Jar文件不包含清单(manifest)中的Main-Class属性。为了在清单中添加自定义属性,我需要向pom.xml文件中添加Maven Assembly插件。您可以在项目概览或中央仓库上查找此插件的最新版本。

添加以下代码后,运行mvn package命令将会创建一个包含依赖项的JAR文件:

<project ...>
    <modelVersion>X.X.X</modelVersion>
    ...
    <licenses>
        ...
    </licenses>

    <properties>
        ...
    </properties>

    <dependencies>
        ...
    </dependencies>

    <build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.your-package.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

添加该插件之后,mvn package命令将在target目录下创建一个名为[artifactId]-[version]-jar-with-dependencies.jar的文件。请注意,这将会复制Scala库到您的Jar文件中,这是正常现象。请确保您的依赖项使用相同版本的Scala,否则您将得到一个庞大的Jar文件。

有用的命令

以下是一些常用的Maven命令:

  • mvn dependency:copy-dependencies:将所有库和依赖项复制到target/dependency文件夹中
  • mvn clean:清除编译生成的文件
  • mvn package:编译项目、运行测试并创建Jar文件

添加依赖项

首先,我会在项目页面中查找“Maven”信息。例如,Google的Guava页面包含了Maven Central的链接。如上所述,中央仓库方便地在左侧边栏中提供了应该添加到pom.xml的代码片段。

如果您在项目页面中找不到Maven信息,请尝试在Google上搜索“[project name] maven”。有时,您仍然找不到任何信息。对于scopt(Scala命令行选项解析器)来说,我无法通过Google找到最新版本。然而,在中央仓库手动搜索成功了。

之后,运行mvn package命令将会下载任何新的依赖项,并进行打包。

其他有用的阅读材料

本教程并未详细讲解所有Maven的内容(尽管我希望在将来能添加更多内容,因为目前的资源有点分散),因此以下是一些有用的文章:

参考链接

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值