Добавление внешних библиотек Java в Adobe / Day CRX (2.2) для использования в файлах JSP - PullRequest
2 голосов
/ 22 февраля 2012

моя компания рассматривает возможность использования Adobe CQ5 в качестве новой системы управления контентом, и мне было дано задание выяснить, как с ней делать определенные вещи.

Одна вещь, которую мы хотели бы сделать, этоиспользуйте некоторые JAR-файлы, которые мы создали для наших старых веб-приложений в скриптлетах на наших страницах JSP, возможно, для вызова службы или чего-то подобного.

Я пытался сделать это с пакетами 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

, который README для этой папки говорит

«Поместите в эту папку библиотеки, которые должны быть доступны всем веб-приложениям и серверу.»

, но у моего файла 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. *, но он не исправляет две другие ошибки.

Я знаю, что это не лучший «способ» использования сервисов, но я надеялся просто получить подтверждениеРазработка концепции, которая показывает, что мы можем использовать эти библиотеки, если захотим.Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я нашел ответ, вы должны связать внешние библиотеки как пакет OSGi.

Процесс можно найти здесь

Найти этот ответ было на удивление сложно, и хотя это занимает больше времени, чем просто добавление JAR, он работает.

1 голос
/ 23 января 2014

Мы строим наши cq-пакеты с Maven, используя "maven-bundle-plugin".Вы можете использовать его для создания собственного пакета с правильными инструкциями по экспорту.

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


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

В теге «Экспорт-пакет» вы должны включить все пакеты, которые вы хотите использовать, в свой jsp.

Также выдолжен указывать зависимости в соответствующем maven pom, если вы используете какие-либо внешние jar в связке.

например, для gson:

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