2

我的公司正在研究使用 Adob​​e CQ5 作为新的内容管理系统,我的任务是弄清楚如何用它来做某些事情。

我们想做的一件事是使用我们为 JSP 页面内的 scriptlet 中的旧 Web 应用程序创建的一些 JAR,可能会调用服务或其他东西。

我考虑过使用 OSGi 捆绑包来做这件事,但我认为这不是我们想要做的。现在,我无法确定将要在我们的 JSP 文件中使用的外部库的位置。

我创建了一个只有一个泛型类的 JAR

package org.company.test;

import java.lang.String;

public class TestService{
    private String myString;
    public TestService(String input){myString = input;}
    public String getMyString(){return myString;}
}

那是罐子里唯一的东西。

我试着把它放在/crx-quickstart/server/lib/common

该文件夹的自述文件说

“将库放在应该在所有 Web 应用程序和服务器之间共享的文件夹中。”

但是当我尝试访问它时,我的 JSP 文件有一些问题。这是整个 JSP 文件:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ TR/html4/loose.dtd">
<%%>
<%@page session="false"%>
<%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0"%>
<sling:defineObjects/>

<%@ page import="javax.jcr.Repository, javax.jcr.Session, javax.jcr.SimpleCredentials, javax.jcr.Node, javax.jcr.NodeIterator,
                 java.net.URLEncoder, java.util.List, java.util.Iterator, javax.jcr.Value, javax.jcr.RepositoryException,org.company.test.TestService;"%>
<html>
    <head> 
        <style type="text/css"><jsp:include page="/content/myBlog/style.css"/></style>
        <!--<link rel="stylesheet" href="/content/myBlog/style.css" type="text/css">-->
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <% 
            TestService jServ = new TestService("TigerBlood");
            String returnValue = "Failed";
            if(jServ!=null){
                returnValue = jServ.getMyString();
            }            
        %>
        <title><%= returnValue %></title> 
    </head> 
    <body> 
        <a href="/content/myBlog.html" class="imgcontainer"><img src="/apps/myBlog/myBlog.png" width="80px" height="60px" border="0" alt="myBlog" /></a>
        <h1><%= returnValue %></h1>
        <div class="body">
            <br>
            <a href="/apps/myBlog/comment.html">Comment</a>
        </div>
    </body> 
</html>

当我在浏览器中导航到它时,我收到以下错误:

Unable to compile class for JSP: An error occurred at line: 16 in the generated java file Only a type can be imported. org.company.test.TestService resolves to a package 

An error occurred at line: 17 in the jsp file: /apps/myBlog/test.jsp TestService cannot be resolved to a type  
14: <!--<link rel="stylesheet" href="/content/myBlog/style.css" type="text/css">-->  
15: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
16: <%  
17: TestService jServ = new TestService("TigerBlood");  
18: String returnValue = "Failed";  
19: if(jServ!=null){  20: returnValue = jServ.getMyString(); 

An error occurred at line: 17 in the jsp file: /apps/myBlog/test.jsp TestService cannot be resolved to a type  
14: <!--<link rel="stylesheet" href="/content/myBlog/style.css" type="text/css">-->  
15: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
16: <%  
17: TestService jServ = new TestService("TigerBlood");  
18: String returnValue = "Failed";  
19: if(jServ!=null){  
20: returnValue = jServ.getMyString();

我可以通过将导入更改为 com.company.test.* 来修复关于包的第一个错误,但它不能修复其他两个错误。

我知道这不是使用服务的最佳“实践”,但我希望只是获得一个概念证明,表明我们可以根据需要使用这些库。任何帮助,将不胜感激。

4

2 回答 2

2

我找到了答案,您必须将外部库捆绑为 OSGi 捆绑包。

该过程可以在这里找到

很难找到答案,虽然它比添加 JAR 更耗时,但它确实有效。

于 2012-02-24T13:20:15.957 回答
1

我们使用“maven-bundle-plugin”使用 Maven 构建我们的 cq 包。您可以使用它来创建您自己的带有正确导出说明的捆绑包。

        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>


        <configuration>
            <instructions>
                <Export-Package>
                    org.company.test.*,
                    com.google.gson.*
                </Export-Package>

在“Export-Package”标签中,你应该包含你想要在你的 jsp 中使用的所有包。

如果您在捆绑包中使用任何外部 jar,您还应该在相应的 maven pom 中指向依赖项。

例如对于 gson:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
于 2014-01-23T08:35:14.793 回答