2012-02-22 1 views
2

내 회사는 Adobe CQ5를 새로운 컨텐츠 관리 시스템으로 사용할 것을 고려하고 있으며 특정 작업을 수행하는 방법을 알아 냈습니다. 그것으로.JSP 파일에 사용할 Adobe/Day CRX (2.2)에 외부 Java 라이브러리 추가

우리가하고자하는 한 가지는 JSP 페이지 내의 스크립틀릿에있는 오래된 웹 애플리케이션 용으로 만든 JAR 파일을 사용하는 것입니다. 아마도 서비스 나 다른 것을 호출 할 수 있습니다.

OSGi 번들을 사용하여이 작업을 수행했는데, 우리가 원하는 작업이 아닌 것으로 생각합니다. 지금 JSP 파일에서 외부 라이브러리를 사용할 위치를 파악하는 데 문제가 있습니다.

난 그냥 일반적인 클래스 항아리에 유일한 것입니다

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;} 
} 

이있는 JAR을 만들었습니다.

내가 /CRX-빠른 시작에 넣어 시도/서버/해당 폴더에 대한 README가

는 "모든 웹 응용 프로그램간에 공유해야이 폴더에 라이브러리를 넣어 말한다

일반/lib에 그리고 서버. "

하지만 액세스하려고하면 JSP 파일에 몇 가지 문제가 있습니다.

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

내가 오기를 변경하여 패키지에 대한 첫 번째 오류를 해결할 수 : 나는 브라우저에서로 이동하면 나는 이러한 오류를 얻을

<%@ 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> 

:이 전체의 JSP 파일입니다 com.company.test. *하지만 다른 두 가지 오류는 수정되지 않습니다.

나는 이것이 서비스를 사용하는 최상의 '실천'이 아니라는 것을 알고 있지만, 나는 우리가 원한다면 우리가 그 라이브러리를 사용할 수 있다는 것을 보여주는 개념 증명을 얻기를 바랐다. 어떤 도움을 주시면 감사하겠습니다.

답변

2

답변을 찾았습니다. 외부 라이브러리를 OSGi 번들로 묶어야합니다.

과정은 그 답을 찾기 위해 놀라 울 정도로 힘들었다하고 그냥 JAR을 추가하는 대신 소요되는 시간은 비록, 작동

here를 찾을 수 있습니다.

1

"maven-bundle-plugin"을 사용하여 우리의 cq 번들을 Maven으로 빌드합니다. 이를 사용하여 올바른 내보내기 지침으로 자신의 번들을 만들 수 있습니다. "수출 패키지"태그에서

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


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

당신은 당신이 당신의 JSP에서 사용하고자하는 모든 패키지를 포함해야한다.

외부 jar를 번들로 사용하는 경우 해당 maven pom의 종속성을 지정해야합니다.

gson의 경우 :

<dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
    </dependency>