maven一波流(3)——使用eclipse构建第一个maven工程

简介: 概述传统工程中,jar包需要自己拷贝到项目里面来,然后项目编译的时候可以访问到这些jar包,完成项目的构建工作。

但是maven项目则不同,实际上项目目录下是没有jar包的。maven工程对项目的结构是有特殊要求的,比如至少得有一个配置文件,告诉工程需要引用那些 jar包。这些jar包会自动从中央仓库下载到本地仓库,并参与项目的构建。


本文通过一个具体的实例了解maven项目结构与传统项目的不同,也了解下maven项目构建方式与传统方式的不同。


新建maven项目

1、File-New-Other-Maven-Maven Project-Next


2、在New Maven Project界面直接Next


3、在Select An Archetype界面,Archetype的意思是原型,所谓原型可以理解为模版,就是有一些结构不用咱们一个个去写,系统自动生成。此处我们选个简单的maven-archetype-quickstart,这个原型会帮我们生成maven工程基本结构,然后Next。


4、输入工程的信息:


Group Id:com.panda

Artifact Id:mvndemo

Version:0.0.1-SNAPSHOT

Package:com.panda.mvndemo

1

2

3

4

注意Package是输入Group Id和Artifact Id后自动生成的,可以理解Artifact Id是项目名,Group Id是组织机构名,此处组织机构就是个人panda了。


5、点击Finish,注意eclipse右下角有进度条,然后项目中的目录文件一直在增加,这是maven帮我们根据原型自动构建项目的过程。


项目目录结构分析

根据maven-archetype-quickstart模型自动生成的项目目录结构如下:


mvndemo:项目

src/main/java:业务代码

src/test/java:测试代码

JRE System Library:JRE库,此处引用了JDK1.8

Maven Dependencies:Maven依赖库,此处引入了由pom.xml指定的junit-3.8.1.jar

junit-3.8.1.jar

src:可以从文件结构看到业务代码和测试代码,一般不用打开看。

target:暂时不用

pom.xml:定义maven配置信息

都很好理解,唯一需要正视的就是pom.xml,它定义了maven项目的依赖jar包情况,具体分析下:


<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/xsd/maven-4.0.0.xsd">

 <!-- 配置项目基本信息 -->

 <modelVersion>4.0.0</modelVersion>

 <groupId>com.panda</groupId>

 <artifactId>mvndemo</artifactId>

 <version>0.0.1-SNAPSHOT</version>

 <packaging>jar</packaging>

 <name>mvndemo</name>

 <url>http://maven.apache.org</url>

 <properties>

   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 </properties>

 <!-- 配置项目依赖的jar包 -->

 <dependencies>

  <!-- 一个依赖 -->

   <dependency>

     <!-- 通过groupId、artifactId、version唯一定位一个jar包,所以这是一个坐标 -->

     <!-- 该坐标指定的junit-3.8.1.jar被自动放入Maven Dependencies依赖库中,程序构建时可以使用该jar -->

     <groupId>junit</groupId>

     <artifactId>junit</artifactId>

     <version>3.8.1</version>

     <scope>test</scope>

   </dependency>

 </dependencies>

</project>



maven项目的构建

正常项目导入jar包,编辑完代码,可以进行测试和打包安装了。maven项目需要通过maven来执行这个过程,主要包括:清理、测试、打包。


清理

右键点击项目名称-Run as-Maven clean,执行清理操作,控制台输出关键信息如下:


[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mvndemo ---

[INFO] Deleting D:WorkspaceEclipsePhotonmvndemo arget

[INFO] Total time: 0.199 s

[INFO] Finished at: 2018-09-07T16:39:35+08:00


可以看出几点:


eclipse菜单Maven clean点击后实际上应该是调用maven完成的maven-clean清理操作

清理操作应该是删除target目录下生成的一些东西

在0.199s内完成了清理操作

总结来说,maven项目需要先清理下,否则可能因为之前生成的东西影响新的生成。


测试

右键点击项目名称-Run as-Maven test,执行测试操作,控制台输出关键信息如下:


Running com.panda.mvndemo.AppTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

1

2

可以看出几点:(如果对单元测试不熟悉的,建议去稍微了解下)


执行了AppTest测试类,该类因为继承了TestCase,而TestCase实现了junit框架下的Test接口实现了单元测试功能

可以推测出,当执行Maven test测试操作时,maven会自动调用src/test/java下面的测试类的测试方法。因为我们已经在pom.xml配置了junit,所以此处能识别并调用junit单元测试方法。

测试方法代码如下,因为assertTrue( true );肯定断言成功,所以最后测试结果是run:1个,没有失败和错误。

public void testApp()

   {

       assertTrue( true );

   }


打包安装

右键点击项目名称-Run as-Maven install,执行安装操作,控制台输出关键信息如下:


[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mvndemo ---

[INFO] Building jar: D:WorkspaceEclipsePhotonmvndemo argetmvndemo-0.0.1-SNAPSHOT.jar

1

2

可以看出,在target目录下生成了一个mvndemo-0.0.1-SNAPSHOT.jar。


运行程序

我们使用命令执行mvndemo-0.0.1-SNAPSHOT.jar


首先在D:WorkspaceEclipsePhotonmvndemo arget目录新建mvndemo.bat脚本,用于在windows平台调用java运行生成的 mvndemo-0.0.1-SNAPSHOT.jar。


mvndemo.bat脚本文件内容如下:


java -jar mvndemo-0.0.1-SNAPSHOT.jar

pause


运行后如下,可见需要配置程序的入口。


D:WorkspaceEclipsePhotonmvndemo arget>java -jar mvndemo-0.0.1-SNAPSHOT.jar

mvndemo-0.0.1-SNAPSHOT.jar中没有主清单属性


可想而知maven程序的入口必然是在pom.xml中配置,我们在pom.xml中为project根节点增加一个build节点如下:


<build>

 <plugins>

  <plugin>

   <groupId>org.apache.maven.plugins</groupId>

   <artifactId>maven-shade-plugin</artifactId>

   <version>1.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>com.panda.mvndemo.App</mainClass>

       </transformer>

      </transformers>

     </configuration>

    </execution>

   </executions>

  </plugin>

 </plugins>

</build>


所以此时就会调用入口类:com.panda.mvndemo.App,这个是自动生成的,代码如下:


public class App

{

   public static void main( String[] args ) throws InterruptedException

   {

       System.out.println( "Hello World!" );

   

   }

}



OK,重新清理、生成,调用mvndemo.bat后:


D:WorkspaceEclipsePhotonmvndemo arget>java -jar mvndemo-0.0.1-SNAPSHOT.jar

Hello World!


OK ,大功告成,厉害炸了。


总结与补充

使用maven后,实际上对整个项目的管理,不论是代码结构目录,还是编译生成运行方式,实际上都变了。


但是都是很合理按照需求发生的变化,我们熟悉一下,也就顺理成章的用就行了。


另补充下,其实不用eclipse,直接执行mvn命令也能完成整个项目的构建、生成,就像java程序也可以直接用java命令行生成一样。有兴趣的可以去了解下,有助于加深对maven的理解,当然不去看也OK,反正我也没看。

相关文章
|
5月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
59 0
|
1月前
|
Java Maven Android开发
eclipse创建maven项目
本文介绍了在Eclipse中创建Maven项目的步骤,包括打开Eclipse、选择Java项目、完成项目创建以及自动下载插件的过程。
79 2
eclipse创建maven项目
|
4月前
|
Java Maven
maven 工程pom依赖优化及常用命令
maven 工程pom依赖优化及常用命令
56 0
|
5月前
|
SpringCloudAlibaba Java Maven
关于拆分boot工程的踩坑之maven多模块间的依赖关系处理
关于拆分boot工程的踩坑之maven多模块间的依赖关系处理
|
5月前
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
|
5月前
|
Java Maven Android开发
杨校老师课堂基于SSM整合之用户登录案例【Eclipse - Maven版】2
杨校老师课堂基于SSM整合之用户登录案例【Eclipse - Maven版】
36 0
|
5月前
|
Java 应用服务中间件 Maven
杨校老师课堂基于SSM整合之用户登录案例【Eclipse - Maven版】1
杨校老师课堂基于SSM整合之用户登录案例【Eclipse - Maven版】
42 0
|
3天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
34 8
|
26天前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
107 1
Maven——创建 Spring Boot项目