Pergunta

Resumo

Isso é possível para webapps implantados em linux + tomcat5.5 ao uso / ver todos os frascos /usr/share/java/ automaticamente?

Detalhes

Estou embalagem meu java webapp para o Ubuntu (ainda a questão está relacionada com qualquer distro baseada em linux) e vai fazê-lo depender de tomcat.

Eu vou colocar descritor de contexto (um arquivo XML) para /usr/share/tomcat5.5/conf/Catalina/localhost/ para fazer meu aplicativo implantado. Ter o meu web dir aqui: /usr/share/<appname>/web, como posso permitir que meu aplicativo para libs jar usar Java instalados no sistema (/usr/share/java)

?

Posso /usr/share/java -> <webdir>/WEB-INF/lib não apenas link simbólico, pois tenho meus frascos personalizados precisam ser colocados no dir lib.

Bad Solução

A solução que eu encontrei até agora é ligar simbolicamente cada frasco necessário para <webdir>/WEB-INF/lib/.

Isto não é tão bom, porque eu tenho que ligar simbolicamente um monte de frascos e pior ainda para ligar simbolicamente todos frascos minha lib dependência direta (jar) exige (e assim por diante). No caso de minha lib dependência direta muda sua lista de frascos necessários eu vou ter que manter esse links simbólicos.

Foi útil?

Solução

Você não deveria fazer isso. aplicativos Java EE são o suposto ser auto-suficiente e não depende de quaisquer recursos fora o pacote de implantação que não os fornecidos pelo contêiner. Portanto, você deve tomar as libs que você precisa a partir desse diretório e adicioná-lo à sua guerra ou pacote de ouvido.

Isso garante que sua aplicação vai se comportar o mesmo onde quer que você implantá-lo e você não estará sujeito a mudanças inesperadas nas versões das bibliotecas em / usr / share / java ....

Outras dicas

De acordo com a o Tomcat classloading documentação , você precisa colocar quaisquer bibliotecas compartilhadas que devem estar disponíveis a todos Tomcat Apps na / biblioteca compartilhada $ CATALINA_BASE / lib - então uma maneira de fazer o que você está procurando fazer é mover as suas bibliotecas de / usr / share / java para US $ CATALINA_BASE / shared / lib.

Mas se eu não estou mal-entendido que mesma documentação, Tomcat também faz o conteúdo da variável CLASSPATH de todo o sistema disponível para o carregador de classe no lançamento, por isso, se o seu diretório - / usr / share / java - foram incluídos no sistema variável CLASSPATH -wide, em seguida, que deve funcionar também. Eu nunca fiz isso, embora; método de fazer o conteúdo de $ CATALINA_BASE do Tomcat / shared / lib disponíveis Tomcat-wide sempre me serviu perfeitamente.

A resposta de entzik me levar para a seguinte solução.

Eu vou usar "má solução" modificado (ver pergunta).

As modificações são as seguintes:

  1. Dependem versão do pacote específico para todas as dependências (afecta arquivo "controle" enquanto empacota para deb)
    exemplo: libcommons-io-java (= 1.3.1) em vez de apenas libcommons-io-java
  2. Symlink para arquivos jar reais em `/ usr / share / java` e não "generalizada" queridos
    exemplo:
    webdir / WEB-INF / lib / commons-io. jar -> /usr/share/java/commons-io-1.3.1.jar
    e não
    webdir / WEB-INF / lib / commons-io.jar -> / usr / share / java / commons-io.jar

Este modificações assegurar webapp não está quebrado, se administrador instalada nova versão de uma biblioteca (commons-io por exemplo).

A desvantagem é esta abordagem infla claramente sistema com versões usadas-by-somente um aplicativo de bibliotecas e pode levar ao problema algum outro aplicativo / biblioteca não pode instalar devido ao conflito de versões. Eu acho que ambos os problemas potenciais são menores, se estamos falando de bibliotecas.

Você tem duas opções, uma é deixar o carregador de classe fornecer as bibliotecas a todos os programas java eo outro é para deixar o carregador de classe fornecer as bibliotecas a todos os contextos do tomcat.

Adicionar links simbólicos para /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib (note que você pode precisar especificar uma versão diferente neste caminho) para permitir que todos os programas Java acesso a essas bibliotecas ou adicioná-los a bibliotecas compartilhadas do Tomcat no var / lib / tomcat5.5 / shared / libs (mais uma vez, o número da versão pode ser diferente) para o acesso de todos os contextos Tomcat.

Gostaria também de salientar que estes locais para o diretório foram tomadas a partir do Ubuntu "Feisty".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top