是否可以将Liferay SDK放在与源代码不同的位置?

是否可以将Liferay SDK放在与源代码不同的位置?,liferay,Liferay,我想询问您使用Liferay SDK开发的最佳实践。 我下载了SDK,准备好了Eclipse,它可以工作了,我可以创建新的portlet并运行本地Liferay实例来测试它 这是我的情况——我所有的源代码都在Eclipse工作区中,目前我正在处理的只是Portlet Liferay SDK位于与工作区完全不同的位置。让我们说~/dev/liferay\u sdk。 Eclipse工作区位于~/workspace中 在乞讨时,它不是那样工作的。由于某种原因,Eclipse无法找到或使用Lifera

我想询问您使用Liferay SDK开发的最佳实践。 我下载了SDK,准备好了Eclipse,它可以工作了,我可以创建新的portlet并运行本地Liferay实例来测试它

这是我的情况——我所有的源代码都在Eclipse工作区中,目前我正在处理的只是Portlet

Liferay SDK位于与工作区完全不同的位置。让我们说~/dev/liferay\u sdk。 Eclipse工作区位于~/workspace中

在乞讨时,它不是那样工作的。由于某种原因,Eclipse无法找到或使用Liferay SDK。当我将Eclipse/Liferay配置中的“项目验证”更改为“忽略”Liferay插件SDK无效时,它开始正常工作

下一个问题发生在需要建立一场战争的时候,例如。 在工作区的portlet目录中存在“build.xml”文件。但在它里面是指另一个xml文件,它应该位于上一个目录中,而这个文件指的是相对位置中的更多内容,等等

简而言之,它假设您在Liferay SDK中有portlet等。 比如“~/dev/liferay\u sdk/portlets”

我的问题是,我完全错了,或者你能建议我这方面的最佳做法吗

我不想把SDK和代码混为一谈,这听起来不对


谢谢你的帮助

Liferay插件是在Liferay插件SDK中开发的,它被称为SDK,这是一个很好的理由

我没有发现插件SDK和捆绑在一起的代码有任何问题,下面是几个原因:

如果您在github上看到liferay,您会发现所有示例Portlet和其他插件都存储在插件SDK中各自的文件夹中

因此,如果您想开发liferay插件(有或没有IDE),最佳实践(我认为唯一有效的方法)是在插件SDK的各个文件夹中创建项目,比如在
portlets
文件夹中创建portlet项目,在
hooks
文件夹中创建hook项目等等

如果在该IDE中创建插件项目(Liferay项目)时使用了,则指定SDK和服务器运行时,它的作用是在插件SDK中创建项目,并在创建的项目中复制
.settings
.classpath
.project
文件。它不会像eclipse通常为其他项目所做的那样在工作区内创建项目


希望我已经解释清楚了,这正是您想要的。

我认为,最佳实践仍然是当您的portlet项目位于Liferay插件SDK目录中时。例如,通过这种方式,您可以利用Eclipse的Liferay IDE插件的所有优点。因为据我所知,Liferay IDE不允许您在其他位置拥有portlet项目。从Liferay SDK目录中导入项目到Eclipse非常容易,这不是问题

但我在尝试将portlet项目保存到Git存储库时也遇到了同样的问题。使用符号链接的可能解决方案并不是在每个系统上都能正常工作。因此,我稍微修改了build.xml文件,以便能够从任何目录运行ant任务。对于Portlet,它是这样的:

<project name="your-portlet" basedir="." default="deploy">
    <property file="build.properties" />

    <property name="project.dir" value="${liferay.sdk.home}" />

    <import file="${project.dir}/build-common-plugin.xml" />
</project>

请注意,您应该在build.properties中定义属性“liferay.sdk.home”,它应该是liferay插件sdk的路径

至于其他类型的Liferay插件(主题、挂钩等),您应该导入另一个构建文件来构建该类型的插件。例如,对于主题,它将是:

<import file="${project.dir}/themes/build-common-theme.xml" />


希望你能明白这一点。:)但是在做类似的事情之前要三思。

我已经对其他答案很满意了,这些答案本可以通过这些网站上的评论发布,但单独的答案提供了一些更多的结构化选项:

正如普拉卡什所说,这样做并不是件坏事。除了他的答案,您不需要将代码放在工作区目录中。Eclipse很乐意将其放在文件系统中的任何位置—因此,当您使用Eclipse时,您甚至不关心代码的确切位置(当您将其签入版本控制时—对不对?—您实际上根本不需要关心

如果您想使用Liferay的OOTB ant脚本:它们完全适合您描述的设置:在SDK目录中工作。这实际上并不坏,但如果您不喜欢它,您只需要接受一个事实,即您无法在不更改build.xml的情况下使用它(就像Artem建议的那样)

另一个选择是使用maven——这也绕过了sdk(和Liferay IDE集成),因此您可以再次自由地将源代码放在任何您喜欢的地方,并让maven完成其余的工作

我可以想象阿泰姆的建议会带来一些相当深奥和罕见的问题(比如当你暗示一些相对位置时,会提到定制的父主题)但我认为这是非常小的,所以如果你能做到这一点:继续。记住,你不能完成SDK所做的基本假设,所以你可能不得不改变违背假设的事情。如果你把这个记在心里,我无法想象这太难了。


当然,该解决方案缺少的是对包含build.${username}.properties的整洁处理—您必须拥有自己的build.properties来定义${liferay.sdk.home}。如果您不是在团队中工作,那没关系。否则,您必须自己发明(并编写代码)或者依靠全局参数为每个团队成员进行配置。

您好!是的,我终于找到了与您在这里建议的几乎相同的解决方案。而且它是有效的。我现在无法想象这个解决方案可能出现的问题……我能想到的另一个缺点是升级到新版本的Liferay Portal时缺乏向后兼容性(从而升级到新版本的Liferay插件SDK