Pergunta

Em nosso projeto MAVEN, estamos tentando a seguinte estrutura de diretório (com cerca de 80 projetos no total, apenas alguns são mostrados para que você obtenha a ideia):

myappli      (pom)
-- module1       (pom)
--|-- utils    (pom)
--|-- ejb       (pom)
--|--|-- myappli-module1-a-ejb    (jar)
--|--|-- myappli-module1-b-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)
...
-- module6       (pom)
--|-- utils       (pom)
--|-- ejb       (pom)
--|--|-- myappli-module6-c-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)

Nota: este é um apartamento estrutura para maven, pois todos os projetos não folhas têm um packaging valor de "pom". (CF BEETBUILDSWITHMAVEN LIVRO).

Definimos as versões de dependência em "dependencyManagement", no "myappli"Pom. Isso funciona bem.

Nosso problema é com a reutilização das próprias dependências. Por exemplo, as dependências do EJB são comuns a todos os projetos EJB (por design). Não queremos cortar e manter tudo isso a cada mudança!

Estávamos pensando em usar alguns "noção de importação"Para as dependências do EJB e define nossas dependências EJB uma vez no nível do aplicativo. Nossas tentativas malsucedidas foram:

  • O maven "parent pom"A noção seria boa, mas já é usada pelos módulos, por isso não está disponível para nosso requisito.
  • Nenhuma instalação de importação encontrada no Maven (exceto para o dependência de gerenciamento)
  • A definição de entidade XML não é reconhecida. Tentamos um pom como o seguinte e recebemos o erro
    "Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'":

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project [
    <!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
    ]>
    <project ...
    ...
    &ejbDependencies;
    ...


Editado : Estou tentando a solução sugerida por Robert, mas algo está errado.

Quando compilar meu projeto EJB, ele não encontra as próprias dependências. Recebo um erro ao compilar (MVN Compile), dizendo que o pacote javax.ejb está faltando.

Nota: Eu executei "MVN Install" no projeto de dependências antes.

Esta é a minha configuração:

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-maven</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-maven-ejb</artifactId>
  <version>${myproj-version}</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.ejb</groupId>
      <artifactId>ejb</artifactId>
    </dependency>

    <dependency>
      <groupId>ojdbc</groupId>
      <artifactId>ojdbc</artifactId>
    </dependency>
  </dependencies>
</project>

---------------------------------
<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-identite-ejb</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-identite-metier</artifactId>
  <name>SNR IDENTITE METIER</name>
  <version>2.0.1</version>
  <packaging>ejb</packaging>

  <dependencies>
    <dependency>
      <groupId>com.company</groupId>
      <artifactId>myproj-maven-ejb</artifactId>
      <version>${myproj-version}</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

Não sei se isso muda alguma coisa, mas temos uma hierarquia que relaciona os dois POMs.
Temos uma estrutura rigorosa do Maven, onde cada diretório declara todos os subdiretos como módulos Maven, e cada subdiretório declara o pai como pai -mãe.
E o diretório pai comum faz parte dessa estrutura.

+---maven
|   \---ejb
+---identite
|   +---ejb
|   |   \---SNR_IDENTITE_METIER

Editado:

A resposta dada pelo recife parece correta. É impossível de fazer com o maven, porque nossa dependência é fornecida e, portanto, não é transitiva :-(

Nós realmente temos muitos problemas com o configuração do Maven. Tantas pequenas coisas simplesmente não funcionam. Hoje descobri que o destino do site não pode lidar com propriedades, que estamos usando para números de versão!

Foi útil?

Solução

Suas dependências importadas têm um forneceu alcance? Na verdade, este escopo não é transitivo (ver Maven Escopos de dependência).

Este pode ser o motivo da não substituição.

Outras dicas

Você pode usar Dependências POM para importar dependências para projetos arbitrários.

Um projeto POM pode parecer semelhante a:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
  </dependencies>
</project>

E é importado como:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <type>pom</type>
</dependency>

Ver Maven, The Definitive Guide - Agrupamento dependências para detalhes.

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