Pergunta

Eu li alguns posts úteis aqui no SO sobre questões Maven anteriores, Atualmente estou muito interessado em aprender maven (porque eu como e porque meu chefe me obriga a). Atualmente estou lendo [esta] [1] livro e eu estou trabalhando meu caminho através de exemplos. É um livro simples, mas a sua tem alguns erros dentro (trivial), mas para um novato como eu pode ser difícil de detectar, uma vez descoberto, pode ser facilmente corrigido. Existe algum outro livro melhor compreender maven de cima para baixo?

A segunda parte da questão está relacionada um exemplo neste livro, talvez um simples explicações iria resolver minhas dúvidas.

Aqui está a coisa, eu fiz um projeto simple-weather em java que recupera as condições meteorológicas a partir de servidor yahoo tempo, dado o código postal particular, retorna informações sobre o tempo.

Então eu fiz um 'simples-webapp' (com o Maven, bem como a citada acima eu esqueci de mencionar que), que é basicamente um projeto web que tem algum servlet padrão já lá com Maven e ele não faz nada.

E eu tenho alguns parent-project Eu quero mesclar essas dois projetos em um só, por isso fiz um pom.xml que tem 2 módulos, um para recuperar informações (projeto java) e outra para exibi-lo na web (web app).

Eu fiz tudo o trabalho no final, mas aqui é a coisa estranha .. se eu fizer exibição webapp qualquer "nome" string permite dizer, em seguida, construí-lo de forma independente, ele faz exatamente imprimir essa string. Mas quando eu colocar o webapp no ??"-projeto pai" e mudar essa string para "NAME1" e construí-lo como sa partent-projecto sub módulo .. nada muda ..

Então eu voltar para o ponto, porque simple-webapp é dependente simple-tempo não pode construí-lo mais por conta própria, por isso agora se eu quero fazer algumas alterações para o webapp .. modificar o webapp fora do "pai-projeto" construí-lo lá depois colá-lo de volta para o projeto pai e, em seguida, irá aplicar as alterações, por que é que, por que não posso alterar diretamente o conteúdo servlet / ou adicionar outro na webapp como a parte do o "pai-projeto"?

Obrigado .. Eu sei que é um longo e chato pergunta, mas eu só estou tentando aprender coisas e não há lugar melhor para perguntar do que aqui: D

Editar - AQUI ESTÃO POM FILES para cada projeto:

1. simple-parent pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sonatype.mavenbook.multi</groupId>
    <artifactId>simple-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Multi Chapter Simple Parent Project</name>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

2. simple-tempo pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-weather</artifactId>
<packaging>jar</packaging>
<name>Multi Chapter Simple Weather API</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

3. simple-webapp pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>simple-webapp Maven Webapp</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-weather</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Foi útil?

Solução

Eu não tenho certeza de entender completamente a sua pergunta. No entanto, vamos explicar alguns princípios em Maven.

Então você tem essa estrutura a:

parent
  + simple-weather
  + simple-webapp

Em um ponto de vista Maven, temos 3 projetos aqui:

  • pai , que é um projeto pom (ou seja, seu atributo packaging está definido para pom)
  • simples de intempéries , que é um projeto jar e tem pai como pai.
  • simples webapp , que é um projeto war, tem pai como pai e simples de intempéries como dependência.

Os projectos pai usa dois conceitos em Maven:

  • A herança, que dizem que todos os seus filhos ( simples de intempéries e simples webapp ) herdará todas as suas propriedades (este conceito é quase a mesma coisa como o extends em Java).
  • A agregação, que é definido pela definição de <modules>. meios de agregação que cada comando que será executado no projeto também será executado em cada module.

O que aconteceria se eu construir (usando mvn clean install) no pai diretório?

  1. Maven vai "compilar" o pai do projeto e, em seguida, Instalar o pom.xml no repositório local.
  2. Maven irá compilar o simples de intempéries do projeto, mas como ele tem um pai, Maven irá procurar o arquivo pom.xml pai para o repositório local. Uma vez que o JAR é criado, ele é instalado no repositório local.
  3. Maven vai finalmente compilar o simples webapp projeto. Maven vai fazer a mesma coisa para o pom.xml pai, mas também para o simples de intempéries do projeto.

O situtation explicado no 3º ponto é importante: Se você quer construir o simples webapp do projeto, o Maven sempre tentar encontrar todas as suas dependências - incluindo simples de intempéries -. a partir do repositório local (ou distante)

É por isso que se você construir apenas o simples webapp sem construir e instalar simples de intempéries , Maven não vai encontrar o último projeto, ou vai encontrar uma versão mais antiga.

Assim, para resumir, quando você trabalha em multi-módulos projeto com Maven, tente sempre executar a compilação e instalar comandos a partir da raiz (ou pai) anuário.

Espero que esta explicação é suficiente clara e ajudá-lo a entender o que acontece no seu caso. Não hesite em pedir mais informações ...

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