本文主要介绍在Eclipse如何使用Maven快速建立Spring项目。本文假设读者已经读过《Maven Tutorial - 快速安装、配置及使用》一文,并安装了Eclipse IDE for Java EE Developers。
Eclipse Maven Plugin的配置
这个版本的eclipse自带Maven的插件,也自带了Maven本身,实际上,排除网络因素之外,可以什么都不做就直接使用。但是,如果我们想用Eclipse使用我们自己安装的Maven,则需要进行配置。使用原生Maven的好处就是,整台机器共享仓库,而不是eclipse项目共享仓库了。
废话少说,如图所示,定位到Windows - Preferences - Maven - Installations,可以看到目前Maven用的是EMBEDDED版本。
点击Add,在Installation home处选择Maven的解压目录,Installation name的话随便写,自己喜欢就好。点击Finish。
别忘了选择刚添加的Maven,并且Apply。
最后来到User Settings的配置界面,配置User Settings到Maven解压目录/conf/settings.xml文件,绿线框里的local repository则会自动跳转,同样Apply并OK,就配置完了。
建立Maven Spring项目
这次我们在Eclipse中用Maven来建立一个稍微复杂点的Spring项目TaskScheduler。
步骤一:新建maven project。
步骤二:选择simple project。
步骤三:填写基本配置。这里的Artifact的内容可以随便写,是马上要创建的project的相关描述。而Parent的内容必须和我一致,表示我们在别人project的基础上继续开发我们的project,实际上这里这指的是用spring框架来开发我们的project。
步骤四:生成项目以后,打开pom.xml,添加如下配置,分别表示jdk的版本,依赖项和build的方式。
<properties>
<jave.version>1.8</jave.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
步骤五:按前一篇文章所述,我们用Maven生命周期中的compile命令,依赖包就会被自动下载下来了。右键项目,Run As,Maven build,如果是第一次则会出现第二张图的配置项,Goals里填compile即可。
深入POM
我们上次说到POM是项目对象模型。当Maven执行一个任务的时候,它首先读取pom.xml,获<dependencies>等标签取所需要的配置,根据<build>等标签的要求执行任务。
POM本身就像一个类,可以继承别的POM。在我们pom.xml里,有个<parent>标签,说明我们的pom继承了spring-boot-starter-parent的POM。
既然继承了spring-boot-starter-parent,自然需要spring-boot-starter的依赖。所以我们在<dependency>标签里配置了spring-boot-starter的依赖。
在<build>标签里,我们采用Spring Boot Maven plugin来build我们的项目。 Spring Boot Maven plugin有几个优势:
- 它打包成一个über-jar,不管有多少依赖项,最终只生成一个jar包。
- 它会自动寻找public static void main()入口函数的位置,让jar包可执行。
- 它可以管理依赖的版本号。
实现TaskScheduler
现在依赖包已经被下载下来了,如图所示。
现在,我们可以在spring的基础上专心的构建项目了。我们的目标是要实现一个管理任务的Scheduler。而Scheduler本身交给Spring框架来完成,我们只要写个Task类即可。
新建ScheduledTasks类,代码如下,其中使用的annotation都是springframework的annotation。
package com.fangzhenpeng;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
public static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime(){
System.out.println("The time is now " + dateFormat.format(new Date()));
}
}
新建入口函数类Main,给本项目提供一个调用方法。
package com.fangzhenpeng;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Main.class);
}
}
至此为止,我们的项目就完成了。右键项目,Run As,Java Application。Console中输出的结果如下,每隔5秒输出一次时间,简单粗暴,恭喜大家。
最后,若是大家有兴趣了解Spring的annotation,我将在Spring专题中介绍,敬请期待。