接上一篇 Gradle入门到精通(四)- IDEA创建JavaSE、JavaWeb工程
这里我们基于MVC思想(web-->service-->dao),做一个简单例子。
1、创建父工程:gradle-parent
与之前创建Gradle工程的步骤一样
1.1 New Project --> 选择Gradle
1.2 输入GroupId、ArtifactId、Version
1.3 配置Gralde本地路径等
1.4 点击 Next
1.5 点击Finish完成。
2、创建子模块:gradle-dao
选中刚才创建的父工程gradle-parent,并且右键,选择 New --> Module
出现如下图:
点击 Next,输入ArtifactId,这里为gradle-dao,
点击 Next,输入模块名,如下图:
最后,点击 Finish,完成。如下图
这里有一个奇怪的问题,添加的子模块gradle-dao没有生成src相关包配置(在第一步中我们已经选择了java
)
怎么解决?
我们只需要在gradle-dao这个子模块中的build.gradle文件的末尾添加一个task即可:
//解决gradle项目不会自动生成src及其相关配置的问题
task "create-dirs" {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.mkdirs()
}
}
如下图所示:
因为我们创建工程时选择了自动导入,会自动生成。如果没有可以双击Gradle projects中的create-dirs生成即可。
3、创建子模块:gradle-service
创建步骤与创建子模块gradle-dao一样
4、创建子模块:gradle-web
创建步骤与创建子模块gradle-dao一样;
javase工程转为javaweb工程(与前几篇内容一样):
第一步:添加目录及文件:
src/main/webapp
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/web.xml
web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
</web-app>
效果如下图:
第二步:在build.gradle文件添加war支持,如下:
apply plugin: 'war'
如下图:
5、配置模块之间的依赖关系
所有模块需要的jar等都放在父工程中
现在观察父工程gradle-parent下的settings.gradle文件的内容,发现该父工程包含了web、service、dao这三个子模块的信息,如下图所示:
根据上一篇的小例子,我们需要引入spring相关的jar包,这些jar包应该放在哪里?每一个子模块都放吗?显然不合理。
我们把spring相关的jar包放到父工程gradle-parent下面,如下图所示:
这样,其他子模块能直接使用这些内容吗?答案是还不行(这个与maven有区别),还需要把这些内容放到allprojects里面,如下内容:
allprojects {
group 'com.etbird'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.springframework', name: 'spring-context', version: '5.0.2.RELEASE'
compile group: 'org.springframework', name: 'spring-web', version: '5.0.2.RELEASE'
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.2.RELEASE'
//注意以下两行需要在web工程中,并且provided作用域改为providedCompile
provided group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
provided group: 'javax.servlet', name: 'jsp-api', version: '2.0'
}
}
此时,allprojects里面的所有内容,子模块都能使用。
如下图所示:
接下来,我们就可以修改子模块的内容,
gradle-dao、gradle-service子模块的build.gradle的内容都去掉;
gradle-web子模块的内容只保留以下内容:
apply plugin: 'war'
其余删掉,因为都从父工程继承而来。
最后,我们子模块有以下依赖关系:gradle-web依赖gradle-service,gradle-service依赖gradle-dao,这些子模块依赖关系如何配置呢?
我们打开gradle-service的build.gradle文件,内容如下:
dependencies {
compile project(":gradle-dao")
}
其中,gradle-dao就是模块名。
如下图:
同理,打开gradle-web的build.gradle文件,内容如下:
apply plugin: 'war'
dependencies {
compile project(":gradle-service")
}
如下图:
6、小例子
开发dao层(gradle-dao模块)
UserDao.java
package com.etbird.dao;
public interface UserDao {
public String save();
}
UserDaoImpl.java
package com.etbird.dao.impl;
import com.etbird.dao.UserDao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
@Override
public String save() {
return "save..ok..";
}
}
build.gradle内容为空
开发service层(gradle-service模块)
UserService.java
package com.etbird.service;
public interface UserService {
public String save();
}
UserServiceImpl.java
package com.etbird.service.impl;
import com.etbird.dao.UserDao;
import com.etbird.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public String save() {
return userDao.save();
}
}
build.gradle
dependencies {
compile project(":gradle-dao")
}
开发web层(gradle-web模块)
UserController.java
package com.etbird.controller;
import com.etbird.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/save")
public String save(Model model){
model.addAttribute("msg", userService.save());
return "ok";
}
}
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/sping-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置组件扫描-->
<context:component-scan base-package="com.etbird.*"/>
<!--处理器映射器、处理器解析器-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--释放静态资源-->
<mvc:default-servlet-handler/>
</beans>
ok.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${ msg }
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!--配置springmvc核心servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
index...
</body>
</html>
build.gradle
apply plugin: 'war'
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
providedCompile group: 'javax.servlet', name: 'jsp-api', version: '2.0'
compile project(":gradle-service")
}
部署到本地tomcat
浏览器地址栏访问地址:http://localhost:8080/user/save
效果如下:
至此,这个Gradle从入门到精通小系列就结束了,还有许多小问题需要完善~~
期待下一个Gradle系列~~