2012-11-15 85 views
3

我想在Eclipse中测试Java rest服务器和其他客户端的集成。 hello-client和hello-server项目都依赖于相同的hello-model jar文件(包含POJO)。在Maven子项目中需要不同版本的相同依赖项

问题是,我想查看客户端或服务器的不同版本,能够在eclipse中编辑代码并能够调试测试 - 即使它们依赖于不同版本的hello-模型。

我试图使用Maven插件荫的模型包在服务器重命名:

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> 

下面是单元测试代码: Best Git strategy for testing different client and server versions

完整代码:

@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(); 
} 

在计算器相关问题 https://github.com/itaifrenkel/hellopojo/blob/master/hellopojo-test/src/test/java/hellopojo/test/HelloTest.java

+1

您是否将服务器和客户端都放在同一个项目结构中?把它们分成两个截然不同的项目,包括独特的pom文件呢? – Andy

+0

我有两个POM文件(客户端和服务器),指的是第三个普通的Pom文件(模型)。所以我最终得到了三个eclipse项目。问题是这两个项目中的每一个都可能引用不同版本的通用(模型)Pom项目。 – itaifrenkel

+2

我以为你想允许不同版本的'普通'...我不再是Maven,但是AFAIK你可以创建一个* parent * project-pom,定义你的依赖关系(共同的),以及从客户端和服务器的pom派生而来。 – Andy

回答

3

我们使用Maven项目的dependencyManagement概念来处理这个。

步骤1 - 在客户端和服务器项目的父pom中声明dependencyManagement。

步骤2 - 在客户端和服务器项目的依赖项部分中,覆盖版本信息。

这可能会帮助您通过测试作用域类路径。我不确定它对编译范围类路径会做什么。

+0

你是否尝试过使用dependencyManagement部分?您的hello-model是否在同一个项目层次结构中? – SSR

相关问题