使用Maven构建Java工程(Building Java Projects with Maven)
来源:互联网 发布:golang与java哪个好 编辑:程序博客网 时间:2024/06/05 13:26
Building Java Projects with Maven
本文采用maven构建一个简单的java工程。
工程描述
你将实现一个显示时间的应用,并采用maven构建它。
准备工作
- 大约15分钟
- 一个文本编辑器或者IDE
- JDK 6或更高
如何完成
如同所有的Spring入门教程,你可以选择一步一步的自己实现,也可以跳过基本的设置步骤。最终,你都将得到一份可以正常运行的代码。
如果选择按步实现,继续下一节。
如果选择跳过基本的安装部分,则执行以下命令从github获取代码:
- git clone https://github.com/spring-guides/gs-maven.git
切换当前目录到gs-maven/initial,跳到安装Maven步骤。
设置工程
首先,要创建一个java工程。
创建目录结构
在你选定的工程目录下,建立如下子目录结构;例如,在*nix系统中使用mkdir -p src/main/java/hello命令:
└── src └── main └── java └── hello在src/main/java/hello目录下,可以创建任何java类文件。这里我们创建两个文件作为示例:HelloWorld.java和Greeter.java。两个文件的源代码如下。
- package hello;
- public class HelloWorld {
- public static void main(String[] args) {
- Greeter greeter = new Greeter();
- System.out.println(greeter.sayHello());
- }
- }
- package hello;
- public class Greeter {
- public String sayHello() {
- return "Hello world!";
- }
- }
现在已经创建了一个java工程,下一步是安装maven。
Maven可以从http://maven.apache.org/download.cgi下载。只需要二进制文件,即apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz文件。
下载zip文件后,解压,并把其bin目录添加到系统path中。(环境变量)
可以执行以下命令,测试Maven是否安装成功:mvn -v。如果安装成功,则会得到类似的输出:
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 07:51:28-0600)Maven home: /usr/share/mavenJava version: 1.7.0_09, vendor: Oracle CorporationJava home: /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jreDefault locale: en_US, platform encoding: UTF-8OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac"
定义一个简单的Maven build
Maven已经安装成功,现在要创建一个Maven工程定义。Maven工程通过一个称作pom.xml的XML文件定义。这个文件描述了工程的名称、版本、依赖(dependencies)等。
在工程根目录下创建pom.xml文件,并写入以下内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.springframework.gs</groupId>
- <artifactId>gs-maven-initial</artifactId>
- <version>0.1.0</version>
- <packaging>jar</packaging>
- </project>
除了<packaging>标签外,这是一个pom.xml文件的最精简配置。它包含了工程配置的下述细节:
- <modelVersion>。POM 模型版本(通常是4.0.0)
- <groupId>。工程隶属的团体或组织。通常采用逆序的域名。
- <artifactId>。工程库文件的名称。(如,工程的jar文件或war文件的名称)
- <version>。工程的版本
- <packaging>。工程如何打包。默认为“jar”采用JAR打包,“war”采用WAR打包。
如果需要选择版本方案,Spring推荐使用[semantic versioning](http://semver.org)。现在,我们有了一个最小的可用的Maven工程。
Build Java Code
Maven目前已经准备就绪。你可以采用Maven执行多个构建生命周期目标,包括编译工程代码,创建库包(例如jar包),把库安装到本地Maven依赖仓库。
执行下述命令:
- mvn compile
这条命令指示Maven执行compile目标。执行结束后,target/classes 目录下将生成.class文件。
由于我们不太可能想要直接发布或使用.class文件,因此下一步需要执行package目标:
- mvn package
package目标将会编译java代码、执行所有的测试、最后将代码打包到target目录下的一个jar文件中。该jar文件的文件名基于工程的<artifactId>和<version>配置。例如,根据前述的pom.xml文件的配置,JAR文件的名称为gs-maven-initial-0.1.0.jar。
如果把<packaging>项的值设置从“jar”改为“war”,target目录下将生成一个WAR文件。
Maven也在本地维护了一个依赖仓库以支持快速访问工程依赖(本地仓库通常位于用户根目录中的.m2/repository目录下)。如果你想把你的JAR文件添加到本地仓库中,执行以下install目标:
- mvn install
install目标将会编译、测试、打包、并将其复制到本地仓库中。这样其他工程就可以引用它。
下面介绍声明dependencies。
声明dependencies
上述的Hello World示例是自包含的,没有依赖任何其他的库。但是,多数的应用程序都会依赖外部库处理一些公共逻辑和复杂功能。
例如,你想在上面的工程中再添加一个打印当前时间的功能。虽然你可以使用java原生库提供的功能,但是Joda时间库提供了更多有趣的功能。
首先,修改HelloWorld.java文件:
- package hello;
- import org.joda.time.LocalTime;
- public class HelloWorld {
- public static void main(String[] args) {
- LocalTime currentTime = new LocalTime();
- System.out.println("The current local time is: " + currentTime);
- Greeter greeter = new Greeter();
- System.out.println(greeter.sayHello());
- }
- }
HelloWorld采用Joda Time的LocalTime类来获取和打印当前时间。
现在执行mvn compile来构建工程,构建就会失败,这是由于你还没有将Joda Time声明为一个依赖。这就需要在pom.xml中添加一下行(在<project>元素内):
- <dependencies>
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- <version>2.2</version>
- </dependency>
- </dependencies>
上述配置声明了工程的依赖列表。在这里只声明了一个Joda Time库的依赖。在<dependency>元素内,包含以下三个子元素:
- <groupId>。依赖隶属的组织或机构。
- <artifactId>。库。
- <version>。版本。
默认情况下,所有的依赖都划归compile依赖的范畴。也就是说,他们应该在编译时可用(如果你在构建一个WAR文件,包含/WEB-INF/libs目录)。此外,<scope>元素的值也可以设置为以下两种:
- provided - 编译工程代码必须的依赖,但是在执行时执行代码的容器将会提供(如,Java Servlet API)
- test - 用于编译和执行测试的依赖,但构建和执行工程的执行时代码时不需要。
现在,执行mvn compile或者mvn package,Maven将会从Maven中心仓库中解析Joda Time依赖,并成功构建工程。
下面是完整的pom.xml文件。
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.springframework</groupId>
- <artifactId>gs-maven</artifactId>
- <packaging>jar</packaging>
- <version>0.1.0</version>
- <dependencies>
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- <version>2.2</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version>2.1</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <transformers>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
- <mainClass>hello.HelloWorld</mainClass>
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>
注意:上述完整的pom.xml文件采用Maven Shade Plugin构建jar文件
Summary
你已经创建了一个简单的基于Maven构建的Java工程。
原文链接:http://spring.io/guides/gs/maven/
- 使用Maven构建Java工程(Building Java Projects with Maven)
- 使用Maven构建Java工程(Building Java Projects with Maven)
- 【spring】Building Java Projects with Maven
- 用Gradle构建java工程 (Building Java Projects with Gradle)
- Spring Boot 项目构建 之 使用 Gradle 构建 Java 项目(Building Java Projects with Gradle)
- Maven构建Java工程
- Maven构建Java工程
- maven java工程构建
- Apache Spark - Building Spark with Maven(使用Maven构建Spark)
- 【Spring】Building Java Projects with Gradle
- 使用Maven构建一个简单的java工程
- 使用Maven构建一个简单的java工程
- Maven构建多模块Java工程
- Maven构建Hadoop(java)工程详情文档
- 使用Maven构建Java项目
- 使用Maven构建Java项目
- 使用maven构建java项目
- 使用Maven构建Java项目
- 解决:php文件在浏览器中调试的时候中文显示乱码
- 谈谈Android里的Context的使用!!!
- LeetCode 29 Substring with Concatenation of All Words
- c++之explicit
- vc 网络编程(socket)
- 使用Maven构建Java工程(Building Java Projects with Maven)
- window.open打开新窗口 参数
- Spring配置事务管理方法
- GitHub 优秀的 Android 开源项目
- bootstrap导航菜单在ie8下不能正常显示问题解决
- zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
- 论男人如何持久学习Python——字符串反转
- 苹果ARM64移动处理器
- iOS中UITextField 使用全面解析