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 这个档案就可以了。

相关文章

网页好读版