如何为Liferay 6.0和6.1维护不同的portlet代码库

时间:2012-03-09 09:29:13

标签: java eclipse liferay backwards-compatibility

在Liferay 6.1中, ServletResponseUtil 类已移至与Liferay 6.0不同的包中:

//Liferay 6.0, 
// this class lives in util-java.jar in the default tomcat web app, /webapps/ROOT/lib. 
import com.liferay.util.servlet.ServletResponseUtil;

//Liferay 6.1
// class lives in portal-service.jar in  directory tomcat-7.../lib/ext/
//import com.liferay.portal.kernel.servlet.ServletResponseUtil;

该类在我们的代码中使用如下:

    String result = personComponentImpl.process(request); 
    response.setContentType("text/xml");

    try {
        ServletResponseUtil.write(response, result);
    }
    catch (Exception e) {
        if (_log.isWarnEnabled()) {
          _log.warn(e, e);
        }
    }

我必须维护和改进为Liferay 6.0版本编写的portlet。  现在我们正在考虑升级到6.1,但是在portlet的内部测试期间,我发现有几行代码会破坏上面提到的依赖关系。在运行时6.1上有ClassNotFoundExceptions。

我的eclipse项目设置为6.0。

我现在该怎么办?:

  • 维护portlet代码的两个不同分支。这是可行的,但从长远来看可能需要付出太多努力

  • 使用一个代码库维护两个不同的Eclipse项目,但使用不同的构建路径(这只是一般策略,可能不起作用)

  • 在java代码中包含一个聪明的黑客,为6.0轻松构建,一次为6.1(也许是工厂......这只是一个模糊的想法)

  • 包含一个新的ant任务,可以为6.1构建+部署,尽管Eclipse设置为构建6.0

  • 完全删除对ServletResponseUtil类的依赖,使用另一个与ServletResponseUtil相同的类。

  • 做其他事情

1 个答案:

答案 0 :(得分:2)

由于ServletResponseUtil不超过350行,非常冗长,甚至是response.getOutputStream().write(data);的错误实现,我会选择"使用另一个同样的#34;。

也许你应该把它与一点点"做其他事情"并且从不依赖Liferay API的稳定性。