经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Maven » 查看文章
使用maven编译Java项目实例
来源:jb51  时间:2019/6/14 9:21:50  对本文有异议

综述

本文演示了用Maven编译Java项目

需要

  • 时间:15分钟
  • 文本编辑器或者IDE
  • JDK 6 或者更高版本

创建项目

本例主要为了展示Maven,所以Java的项目力求简单。

创建项目结构

择一个项目目录,在 *nix系统上使用下面语句

mkdir -p src/main/java/hello

window下使用命令

mkdir src\main\java\hello

创建如下结构:

  1. └── src
  2. └── main
  3. └── java
  4. └── hello

在src/main/java/hello目录下创建Java文件HelloWorld.java和 Greeter.java

src/main/java/hello/HelloWorld.java

  1. package hello;
  2. public class HelloWorld {
  3. public static void main(String[] args) {
  4. Greeter greeter = new Greeter();
  5. System.out.println(greeter.sayHello());
  6. }
  7. }

src/main/java/hello/Greeter.java

  1. package hello;
  2. public class Greeter {
  3. public String sayHello() {
  4. return "Hello world!";
  5. }
  6. }

现在项目完成,可以用Maven编译了。有关Maven的安装,可以参考Apache Maven 3.1.0 安装、部署、使用

定义简单的Maven编译

首先,在项目的根目录下创建一个Maven项目定义文件pom.xml,该文件主要是说明项目的名称、版本和依赖库

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>org.springframework</groupId>
  6. <artifactId>gs-maven</artifactId>
  7. <packaging>jar</packaging>
  8. <version>0.1.0</version>
  9. <build>
  10. <plugins>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-shade-plugin</artifactId>
  14. <version>2.1</version>
  15. <executions>
  16. <execution>
  17. <phase>package</phase>
  18. <goals>
  19. <goal>shade</goal>
  20. </goals>
  21. <configuration>
  22. <transformers>
  23. <transformer
  24. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  25. <mainClass>hello.HelloWorld</mainClass>
  26. </transformer>
  27. </transformers>
  28. </configuration>
  29. </execution>
  30. </executions>
  31. </plugin>
  32. </plugins>
  33. </build>
  34. </project>

除了<packaging> 元素可选外,其他的元素是构成pom.xml 文件的最基本的元素了。它包括以下几个项目的配置:

  • <modelVersion> :POM 模块版本(通常是4.0.0).
  • <groupId> :项目所属的组织编号,通常用域名
  • <artifactId> 项目的名称(比如,JAR或者WAR的名称)
  • <version> 项目编译的版本号
  • <packaging> 项目打包形式,jar或者war

编译Java代码

运行下面语句编译

mvn compile

编译完成的.class文件将会出现在target/classes目录下.如下图

运行项目:

mvn exec:java -Dexec.mainClass="hello.HelloWorld"

输出如下:

如果不想直接运行.class文件,可以将其打包:

mvn package

打包完成后,会在target目录下生成一个JAR文件,文件名由<artifactId> 和 <version>组成。比如本例,将会根据pom.xml生成gs-maven-0.1.0.jar

如果你想安装您的项目的JAR文件到本地Maven仓库,那么你应该调用下面语句:

mvn installmvn install

此时,你的项目代码将会经过编译、测试、打包并拷贝到本地依赖库,提供给其他项目引用。

以上例子源码的地址https://github.com/waylau/maven-demo中的demo1

说到项目依赖,下面说下声明依赖

声明依赖

上面的例子比较简单,没有用到其他库。但是真实的项目可能会引用(依赖)到很多其他库。

下面例子,依赖了Joda Time的库。

修改src/main/java/hello/HelloWorld.java

  1. package hello;
  2. import org.joda.time.LocalTime;
  3. public class HelloWorld {
  4. public static void main(String[] args) {
  5. LocalTime currentTime = new LocalTime();
  6. System.out.println("The current local time is: " + currentTime);
  7. Greeter greeter = new Greeter();
  8. System.out.println(greeter.sayHello());
  9. }
  10. }

现在运行mvn compile将会报错,因为没有声明依赖。在 <project> 节点下插入如下:

  1. <dependencies>
  2. <dependency>
  3. <groupId>joda-time</groupId>
  4. <artifactId>joda-time</artifactId>
  5. <version>2.2</version>
  6. </dependency>
  7. </dependencies>

这段内容就声明了项目的依赖。每个依赖节点<dependency>都由三个子节点组成:

  • <groupId> : 该依赖库所属的组织名称
  • <artifactId> : 依赖的库名
  • <version> : 依赖的库版本

在POM 4中,<dependency> 中还引入了<scope> ,它主要管理依赖的部署。目前<scope> 可以使用5个值:

  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

现在你运行mvn compile或者mvn package,Maven会自动下载相关依赖。

完整的pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>org.springframework</groupId>
  6. <artifactId>gs-maven</artifactId>
  7. <packaging>jar</packaging>
  8. <version>0.1.0</version>
  9. <!-- tag::joda[] -->
  10. <dependencies>
  11. <dependency>
  12. <groupId>joda-time</groupId>
  13. <artifactId>joda-time</artifactId>
  14. <version>2.2</version>
  15. </dependency>
  16. </dependencies>
  17. <!-- end::joda[] -->
  18. <build>
  19. <plugins>
  20. <plugin>
  21. <groupId>org.apache.maven.plugins</groupId>
  22. <artifactId>maven-shade-plugin</artifactId>
  23. <version>2.1</version>
  24. <executions>
  25. <execution>
  26. <phase>package</phase>
  27. <goals>
  28. <goal>shade</goal>
  29. </goals>
  30. <configuration>
  31. <transformers>
  32. <transformer
  33. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  34. <mainClass>hello.HelloWorld</mainClass>
  35. </transformer>
  36. </transformers>
  37. </configuration>
  38. </execution>
  39. </executions>
  40. </plugin>
  41. </plugins>
  42. </build>
  43. </project>

运行项目:

mvn exec:java -Dexec.mainClass="hello.HelloWorld"

输出如下:

以上例子源码的地址https://github.com/waylau/maven-demo中的demo2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号