我如何在 Liferay portlet 中使用 webjars

How do I use webjars in a Liferay portlet

我一直在尝试将 shufflejs 包含在 Liferay (6.2) portlet 中。

  1. 我已将以下依赖项添加到我的 pom.xml 文件中:

    <dependency>
      <groupId>org.webjars.bower</groupId>
      <artifactId>shufflejs</artifactId>
      <version>4.0.0</version>
      <scope>compile</scope>
    </dependency>
    
  2. 我已确认在我的 tomcat 服务器上存在 webapps/my-portlet/WEB-INF/lib/shufflejs-4.0.0.jar 并且其中包含 META-INF/resources/webjars/shufflejs/4.0.0/dist/shuffle.js
  3. 我在 liferay-portlet.xml 文件中包含了以下行:

    <header-portlet-javascript>
      /webjars/shufflejs/4.0.0/dist/shuffle.js
    </header-portlet-javascript>
    
  4. 当我用浏览器加载我的 portlet 页面时,除了 http://localhost:20080/my-portlet/webjars/shufflejs/4.0.0/dist/shuffle.js?browserId=other&minifierType=js&languageId=en_US&b=6210&t=1465296591338
  5. 出现“404 未找到”错误外,我得到了所有内容

我错过了什么?

谢谢

假设你使用的是 Servlet 3.0 容器,你就错了 URL。您需要使用:

<header-portlet-javascript>
  /webjars/shufflejs/4.0.0/dist/shuffle.js
</header-portlet-javascript>

根据 webjars documentation:

Instructions for Servlet 3

With any Servlet 3 compatible container, the WebJars that are in the WEB-INF/lib directory are automatically made available as static resources. This works because anything in a META-INF/resources directory in a JAR in WEB-INF/lib is automatically exposed as a static resource.

请注意,本文档表明您应该使用 webjars/shufflejs/4.0.0/dist/shuffle.js,但对 Liferay <header-portlet-javascript> 配置进行一些试验会导致需要前面的 / 因为 Liferay 会将此 URL 连接到 portlet 名称的末尾以形成完整的 Liferay 资源 URL.

我找到了问题的根源。我已经使用 JRebel 在 Eclipse 中部署了我的 portlet 和 运行 门户。当我 deploy/run 没有 JRebel 的独立 portlet 时,找到了这个资源。此外,我可以关闭门户,然后在 Eclipse/JRebel 中将其重新打开 - 现在可以找到资源。

我之前在运行Eclipse/JRebel的时候遇到过类似的问题(见)。总而言之 Eclipse/JRebel 很棒,但有时在部署 portlet 时会出现一些问题。