2015
Nov
04

Maven 是一个 Java 的工具,可以用来帮你下载 Java LibrariesJava 已经存在非常多年,网路上有很多 Java 相关的 Libraries ,如果你手动一个一个下载回来安装,再手动输入长长的指令去载入这些 libraries ,这个做法会浪费太多的时间,而且一般人的记忆力也没这么好,记不下这么多 libraries ,所以透过 Maven 就可以轻松的搞定所有事情。

安装 Maven

请到下面这个网址下载 Maven 原始档。

我的 Linux 系统安装 Maven 方式如下: (2015/11/16)

如果你是用 windows 系统,请参考下面这个官方教学网址 http://maven.apache.org/install.html

到了这里就算安装完成了 ,你可以用 terminal 输入 mvn --version 来测试看看有没有安装成功,例如我输入 mvn 就会看到 mvn 有正确执行。

Example
  1. $ mvn --version
  2. source ~/.bash_profile && mvn --version
  3. Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
  4. Maven home: /home/puritys/apache-maven-3.3.3
  5. Java version: 1.7.0_85, vendor: Oracle Corporation
  6. Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre
  7. Default locale: en_US, platform encoding: UTF-8
  8. OS name: "linux", version: "3.10.0-229.el7.x86_64", arch: "amd64", family: "unix"

环境变数设定

安装 Maven 完成后,还要记得补一个环境变数叫 "M2" ,这个变数很重要,一定要设定,习惯上会直接设定成个人目录下的 .m2,设定好之后,未来只要你用 Maven 安装 Java Libraries , Maven 就会自动装到 ~/.m2 这个目录里面 。

增加 M2 环境变到档案 .bash_profile
  1. export M2=~/.m2

建立一个 Maven Project

mvn archetype:generate -DgroupId=com.example -DartifactId=example -DinteractiveMode=false

执行上面这个指令, Maven 就会自动建立出 example 这个档案夹,并且建立 pom.xml, src, main, test, App.java 这些目录与档案,你要开发的 source code 是放在 src/main 底下,而测试程式很明显的要放在 test 底下。

src/main/java/example/App.java 这个程式是 Maven 自动建立的,现在我们来使用 Maven 编译并执行这支程式。

  • mvn compile
  • mvn exec:java -Dexec.mainClass="com.example.App"

compile 为编译程式,Maven 会自动装 src/main 底下的程式所以拿出来编译,然后放在 target 这个目录底下,而 mvn exec:java -Dexec.mainClass="com.example.App" 这个指令则是告诉 Maven 我们要执行的程式叫 "com.example.App" ,这是 App.java 这个档案的 Package Name ,在 Java 的世界里每支程式都有自已的 package 名称,package 名称要跟符合档案的路径,而且最后一个点后面的名称一定要跟档名一样,所以 com.example.App 会指向 com/example/App.java 这个档案。

Unit test

在 test/java/com/example/ 底下有一个 AppTest.java 的程式,这也是 Maven 预设帮我们建立好的 Unit test 范例,我们可以使用指令 mvn test 来直接执行测试程式。

  • mvn test

Maven project setting pom.xml

pom.xml 是 Maven 专用的 project 设定档,你可以在这个档名加上你需要的 Libraries, Maven 就能够自动下载你指定的 Libraries ,例如预设 Maven 已经帮我们在 pom.xml 中加入了 junit 这个 unit test 的 Library 。

我安装的 Maven 是 3.3.3 版,它预设帮我们建的 junit 版本会是 3.8 版,这个版本太旧了,某些功能无法使用,请记得手动直接升上 4.12 。

pom.xml
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.example</groupId>
  5. <artifactId>maven</artifactId>
  6. <packaging>jar</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>maven</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>4.12</version>
  15. <scope>test</scope>
  16. </dependency>
  17. </dependencies>
  18. </project>

载入 local 端 maven package

有时候我们要在 A project 找另一个 library B 的 bug ,但预设 Maven 只会去下载远端的 library ,其实只要加入 systemPath 跟 scope 这两个参数就行了。

Example
  1. <dependencies>
  2. <dependency>
  3. <groupId>javax.sql</groupId>
  4. <artifactId>jdbc-stdext</artifactId>
  5. <version>2.0</version>
  6. <scope>system</scope>
  7. <systemPath>${java.home}/lib/rt.jar</systemPath>
  8. </dependency>
  9. </dependencies>

先到 Library B 执行 mvn package ,目录 target 就会出现 ***.jar 的档案,然后再回到 A 专案,修改 pom.xml 在 dependency 加入 B 的设定,并指定 system Path 就行了。

问题处理

mvn Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher

我第一次安装的时候有碰到这个问题,原因是因为我下载到 apache-maven-3.3.3-src.tar.gz 这个档案,只要重新下载 apache-maven-3.x.x.bin.tar.gz 这个档案就可以了。

相关文章


回應 (Leave a comment)