我想在Eclipse中测试Java rest服务器和rest客户端的集成。 hello-client和hello-server项目都依赖于相同的hello-model jar文件(包含POJO)。
问题在于我想查看客户端或服务器的不同版本,能够在eclipse中编辑代码并能够调试测试 - 即使它们依赖于不同版本的hello-model
我尝试使用Maven shade插件重命名服务器中的模型包:
hellopojo.model - > hellopojo.server.model
但它不会影响Eclipse(我想错误的Maven阶段)。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>hellopojo.model</pattern>
<shadedPattern>hellopojo.server.model</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
这是单元测试代码:
@Parameters({"port"})
@BeforeClass
public static void startWebapp(
@Optional("8081") int port) throws Exception {
restUri = "http://localhost:"+port+"/rest";
client = new HelloClient(new URI(restUri));
server = new Server(port);
server.setHandler(createWebAppContext());
server.start();
}
private static ServletContextHandler createWebAppContext() {
ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
handler.setContextPath("/");
ServletHolder servlet = new ServletHolder(new ServletContainer());
servlet.setInitParameter(
"com.sun.jersey.config.property.packages",
HelloResource.class.getPackage().getName());
servlet.setInitParameter(
"com.sun.jersey.api.json.POJOMappingFeature" ,
"true");
handler.addServlet(servlet, "/rest/*");
return handler;
}
@AfterClass
public static void stopWebapp() throws Exception {
server.stop();
}
stackoverflow上的相关问题: Best Git strategy for testing different client and server versions
答案 0 :(得分:3)
我们使用Maven项目的dependencyManagement概念来处理这个问题。
步骤1 - 在客户端和服务器项目的父pom中声明dependencyManagement。
步骤2 - 在客户端和服务器项目的依赖项部分中覆盖版本信息。
这可以帮助您完成测试范围类路径。我不确定它会对编译范围类路径做什么。