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

文章目录

【maven系列2】使用Maven构建Scala项目简介Scala Maven插件获取MavenLinux(Debian)OSX手动安装(Red Hat Linux、OSX、Windows)

创建您的第一个项目原型解释创建一个Jar文件有用的命令添加依赖项其他有用的阅读材料

参考链接

简介

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文件:

X.X.X

...

...

...

...

...

...

org.apache.maven.plugins

maven-assembly-plugin

2.4

jar-with-dependencies

com.your-package.MainClass

package

single

添加该插件之后,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的内容(尽管我希望在将来能添加更多内容,因为目前的资源有点分散),因此以下是一些有用的文章:

Maven生命周期(解释了clean、package、install等目标的含义)

参考链接

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: