当一堆Maven项目互相依赖需要联调时,往往会被以下问题所困扰:
1、被依赖的项目修改,咋debug时没效果?
2、被依赖项目,哪怕直接依赖在工程中,有时候代码也提示找不到源码。
所以我采取了嵌入Jetty容器+Maven命令配合的方式执行。
解决方案:
1、建立声明Modules的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>com.xxx</groupId>
<artifactId>xxx</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>xxx</name>
<modules>
<module>../x1</module>
<module>../x2</module>
</modules>
</project>
并在此执行一次
mvn eclipse:eclipse
2、项目pom.xml中加入jetty和servlet相关依赖
<!-- jetty相关 -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<!-- end -->
3、加入Jetty容器启动main方法
package com.tuling.api;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class WebServer {
public static void main(String[] args) throws Exception {
String projectPath = System.getProperty("user.dir");
String[] fileName = projectPath.split("\\\\");
// 工程名称
String projectName = fileName[fileName.length - 1];
// 如项目在trunk下,可以重写项目名称,否则会识别为trunk
projectName = "api";
// web资源路径
String WebRoot = "src/main/webapp";
// 端口号
int port = 8080;
Server server = new Server(port);
WebAppContext webapp = new WebAppContext();
webapp.setDefaultsDescriptor("src/main/resources/webdefault.xml");
webapp.setDescriptor("src/main/webapp/WEB-INF/web.xml");
webapp.setContextPath("/" + projectName);
webapp.setWar(WebRoot);
server.setHandler(webapp);
server.start();
server.join();
}
}
4、Eclipse中的设置
a)把项目引入(废话……)
b)创建编译启动项
compile test-compile
这一步主要目的是导入profile中的变量。
c)启动刚才编写的main方法