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,反正我也没看。

相关文章
|
1月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
50 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
1月前
|
Java Android开发
Eclipse Java 构建路径
Eclipse Java 构建路径
39 3
|
2月前
|
Java Maven Android开发
eclipse创建maven项目
本文介绍了在Eclipse中创建Maven项目的步骤,包括打开Eclipse、选择Java项目、完成项目创建以及自动下载插件的过程。
120 2
eclipse创建maven项目
|
4月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
62 1
|
5月前
|
自然语言处理 Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性。`bus-core-api(1.0-SNAPSHOT)`构建后,自动触发`app-web-ui`和`app-desktop-ui`的构建,两者均依赖bus-core-api的1.0快照版。 ``` 纯文本摘要: Maven自动化构建保证依赖项的稳定性:当`bus-core-api`的1.0-SNAPSHOT版本完成构建时,它会触发依赖它的`app-web-ui`和`app-desktop-ui`项目的构建,这两个项目都依赖`bus-core-api`的相同版本。
|
5月前
|
Java Maven
maven 工程pom依赖优化及常用命令
maven 工程pom依赖优化及常用命令
81 0
|
5月前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven生命周期包括clean(clean目标清理输出),default(validate到deploy执行编译、测试、打包、验证、安装和部署),site(site与deploy-site生成发布站点)。每个阶段由插件目标组成,如mvn clean package执行清理和打包。生命周期阶段按顺序执行,目标可在阶段外独立调用。
|
5月前
|
自然语言处理 Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性。当`bus-core-api`(1.0-SNAPSHOT)构建后,`app-web-ui`和`app-desktop-ui`(两者依赖1.0的bus-core-api)自动触发构建,保证项目间的兼容性。 ``` 纯文本摘要: Maven自动化构建用于保持依赖项目的稳定性。例如,bus-core-api(1.0-SNAPSHOT)构建完成后,依赖它的app-web-ui和app-desktop-ui这两个项目(都依赖bus-core-api的1.0版本)会自动开始构建,以确保它们与更新的core接口兼容。
|
Java Android开发
Eclipse工程错误的解决方法
本文为原创,如需转载,请注明作者和出处,谢谢!     在导入或覆盖Eclipse工程时可能会出现Eclipse工程错误(Eclipse工程结点上有一个红叉)。
708 0