使用maven编译Java项目实例

综述

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

需要

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

创建项目

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

创建项目结构

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

mkdir -p src/main/java/hello

window下使用命令

mkdir src\main\java\hello

创建如下结构:

└── src
  └── main
  └── java
    └── hello

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

src/main/java/hello/HelloWorld.java

package hello;
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

src/main/java/hello/Greeter.java

package hello;
public class Greeter {
public String sayHello() {
return "Hello world!";
}
}

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

定义简单的Maven编译

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

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>
<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>

除了<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

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());
}
}

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

<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
</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

<?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>
<!-- tag::joda[] -->
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
<!-- end::joda[] -->
<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>

运行项目:

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

输出如下:

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

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

(0)

相关推荐

  • maven项目在实践中的构建管理之路的方法

    前言 最近一个月参与了公司几个项目的脚手架构建,适当总结下经验.之前见过太多项目依赖,构建,管理混乱不堪,导致后续的维护性差,甚至出现由此引发的事故.当时就有一个规范管理的想法. 依赖管理 依赖管理,其实就是依赖范围的管理.这里我叫他 依赖池.也就是 所有相关项目的依赖只能从这个池子里拿,不能超出其范围.池子里的依赖我们定义为都是久经考验的同志.以maven工程为例,我们可以定义 一个名为ooxx-dependencies 的 pom 类型的工程.这里用来存放我们经过技术选型并测试通过的依赖.每

  • java如何使用自己的maven本地仓库详解

    本地仓库 主要是一种缓存,当你使用远程仓库中下载组件后,它下一次会优先从本地进行加载,一般位于USER_HOME/.m2目录下,我们自己也可以建立公用的包,把包发布到本地仓库,自己在其它项目里直接可以用,当然如果希望在任务地方都使用自己的包,需要把它发布到远程仓库中. 像nuget,npm一样maven也是仓库 Jar的maven配置 <dependency> <groupId>javalindday</groupId> <artifactId>jpaDem

  • 使用maven构建java9 service实例详解

    序 本文主要研究下如何在maven里头构建java9 multi module及service实例 maven 整个工程跟传统maven多module的工程结构一样,java9的一个module对应maven project的一个module.下面是根目录下的pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4

  • Maven在Java8下如何忽略Javadoc的编译错误详解

    JavaDoc简介And基础知识 (一) Java注释类型 //用于单行注释. /*...*/用于多行注释,从/*开始,到*/结束,不能嵌套. /**...*/则是为支持jdk工具javadoc.exe而特有的注释语句. 说明:javadoc 工具能从java源文件中读取第三种注释,并能识别注释中用@标识的一些特殊变量(见表),制作成Html格式的类说明文档.javadoc不但能对一个 java源文件生成注释文档,而且能对目录和包生成交叉链接的html格式的类说明文档,十分方便. (二)Java

  • Java中Maven项目导出jar包配置的示例代码

    具体代码如下所示: <!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 --> <build> <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/resources</directory> <!-- 将<director

  • Java编译器用maven打war包出错解决办法

    在用maven打包时,出现过如下两个错误: 错误1:程序包javax.servlet不存在,程序包javax.servlet.http不存在 错误2:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:comp

  • 使用maven编译Java项目实例

    综述 本文演示了用Maven编译Java项目 需要 时间:15分钟 文本编辑器或者IDE JDK 6 或者更高版本 创建项目 本例主要为了展示Maven,所以Java的项目力求简单. 创建项目结构 选 择一个项目目录,在 *nix系统上使用下面语句 mkdir -p src/main/java/hello window下使用命令 mkdir src\main\java\hello 创建如下结构: └── src └── main └── java └── hello 在src/main/java

  • 使用maven运行Java Main的三种方法解析

    maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译. mvn compile 2.编译完成后,执行exec运行main方法. 不需要传递参数: mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" 需要传递参数: mvn exec:java -Dexec.main

  • 配置pom.xml用maven打包java工程的方法(推荐)

    最近由于项目需要,研究了一下maven的打包,项目要做到 1,生成3个目录/lib,/conf,/bin目录 2,把所有的jar目录编译.拷贝到/lib目录(包括maven的jar包和lib目录下的jar,以及编译的jar包) 3,把所有的启动脚本从工程根目录拷贝到/bin目录 4,把所有的配置文件从src/main/resources拷贝到/conf 下面是配置的pom.xml,我把相关的配置都加了注释,一看就能明白,把build节点拷贝到你们的项目中,就基本可以用了:) <project x

  • Eclipse不自动编译java文件的终极解决方法

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般是如下几个步骤.但是还是不自动编译. 最基本的解决办法--这是前提 然后clean和refresh下项目.如果这样还是不行,用下面的方法吧,终极解决方案...... 1:去除项目中的jre的classpath 2:在将jre的包添加到classpath中来 OK,大功告成!再出现eclipse无法自

  • 命令提示符编译java的方法(必看篇)

    先新建一个文件夹kun,kun就是类所在的package.新建一个java文件. HelloWorld.java的代码如下: package kun; public class HelloWorld{ public static void main(String[] args) { System.out.println("hello world"); A a=new A(); a.setValue(120); System.out.println(a.getValue()); } }

  • maven搭建java ee项目图文教程

    一.开发环境 jdk1.7  tomcat7 eclipse-jee-luna-R-win32 maven2.2.1 二.搭建步骤 1.点击File->New->Other,选择maven project 2.选择maven project,点击Next,,而后再点击next,进入如下界面 如图选择最后一个,点击next 3.看到以下界面 输入Group Id跟Artifact Id,点击finish完成基本创建 4.创建好的项目结构如图所示(Java视图) 如果是Java EE视图,看到的项

  • Eclipse中使用Maven创建Java Web工程的实现方式

    Eclipse中使用Maven创建Java Web工程的实现方式 1)在Eclipse项目栏中右键单击空白,New(或直接使用Ctrl+N快捷键) -- Other --Maven Project. 2)选择以webapp模板创建工程 3)填写Group Id . Artifact Id 等信息. groupId 定义了项目属于哪个组,举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp. artifacted 定义了当前maven

  • 用命令行编译java并生成可执行的jar包方法

    1.编写源代码 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: package test; import java.awt.*; import javax.swing.*; //更多包的导入... class NotePadFrame extends JFrame { //主界面的设计... } //其他相关代码... public class CardLayoutDemo { public static

  • 解决idea使用maven编译正常但是运行项目时却提示很多jar包找不到的问题

    如题,编译和打包都是正常的,pom文件中依赖存在并且没有报错.找到相应包的引用位置,也能正常访问包中的内容.而且提示的一般都是基础的jar包找不到,比如单元测试用到的jar包等... 情形一: 其他同事提交代码时把idea中的 .iml 文件也一起提交了,该文件中配置的jdk lib 路径与自己电脑中的该路径不一致. 解决方法很简单,执行一下 maven update 即可,也可以手动修改 .iml 文件中的该路径. 情形二: 排除情形一出现的原因,或使用情形一中的方法解决无效时,可以使用以下命

  • Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决

    问题: 打开一个新的maven工程,发现.Java文件是这样的: 其实是编辑器未识别成maven工程. 解决: 1.点击侧边栏Maven 2.选择导入工程的pox.xml文件 3.恢复正常 补充知识:idea项目在maven projects中显示灰色的解决办法 在使用idea的过程中,遇到其中一个maven模块变成灰色,如下所示: 造成这个的原因可能是忽略了maven模块,可以尝试如下解决方法:在idea中maven的setting中找到ignored files,看右边的面板中是否将变灰的m

随机推荐