문제

이전 Maven 질문에 대한 유용한 게시물을 읽었습니다. 현재 Maven을 배우는 데 매우 관심이 있습니다 (내가 좋아하고 상사가 나를 요구하기 때문에). 나는 현재 [this] [1] 책을 읽고 있고 나는 내 길을 가로지고있다. 그것의 간단한 책이지만 내부에 약간의 오류가 있지만 (사소한 것), 나와 같은 초보자에게는 발견하기가 어려울 수 있습니다. Maven이 위에서 아래로 이해하는 것이 더 나은 책이 있습니까?

질문의 두 번째 부분은이 책의 예와 관련이있는 것입니다. 아마도 간단한 설명은 내 의심을 해결할 것입니다.

여기에 내가 만들었습니다 simple-weather 특정 우편 번호가 주어지면 날씨 정보를 반환하는 Java의 프로젝트.

그런 다음 나는 'Simple-Webapp'을 만들었습니다 (Maven과 위에서 언급 한 것을 잊어 버렸습니다). 이것은 기본적인 웹 프로젝트입니다.이 웹 프로젝트는 이미 Maven과 함께 기본 서플릿이 있으며 아무것도하지 않습니다.

그리고 나는 약간 있습니다 parent-project 나는이 두 프로젝트를 하나로 병합하고 싶기 때문에 2 개의 모듈이있는 pom.xml, 1 개의 정보 (Java Project) 및 다른 하나를 웹 앱 (웹 앱)에 표시 할 수있는 pom.xml을 만들었습니다.

나는 모든 것이 끝났지만 여기에 이상한 일이 있습니다. WebApp에 어떤 문자열 "이름"을 표시하면 독립적으로 빌드하면 해당 문자열을 정확하게 인쇄합니다. 그러나 WebApp을 "Parent-Project"에 넣고이 문자열을 "Name1"으로 변경하고 SA Partent-Project 하위 모듈로 빌드 할 때 .. 아무것도 변하지 않습니다.

Simple-Webapp이 단순한 날씨에 의존하기 때문에 더 이상 자체적으로 빌드 할 수 없기 때문에 요점으로 돌아갑니다. 이제 WebApp을 변경하고 싶다면 "Parent- 외부의 WebApp을 수정합니다. 프로젝트 "그곳에 구축 한 다음 부모님 프로젝트에 다시 붙여 넣으면 변경 사항이 적용됩니다. 왜 서비스 컨텐츠를 직접 변경할 수 없는가? -프로젝트"?

감사합니다 .. 나는 그것의 길고 지루한 질문을 알고 있지만, 나는 단지 일을 배우려고 노력하고 있으며 여기보다 물어볼 더 좋은 곳은 없습니다 : D

편집 - 각 프로젝트의 POM 파일은 다음과 같습니다.

1. 간단한 pAM.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. 간단한 날씨 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. 간단한 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>
도움이 되었습니까?

해결책

나는 당신의 질문을 완전히 이해하지 못할 것입니다. 그러나 Maven의 몇 가지 원칙을 설명해 봅시다.

그래서 당신은 그러한 구조를 가지고 있습니다.

parent
  + simple-weather
  + simple-webapp

Maven의 관점에서, 우리는 여기에 3 개의 프로젝트가 있습니다.

  • 부모의,, 그것은 a pom 프로젝트 (예 : 그것의 packaging 속성이 설정되었습니다 pom)
  • 단순한 날씨,, 그것은 a jar 프로젝트와 가지고 있습니다 부모의 부모로서.
  • 간단한 webapp,, 그것은 a war 프로젝트, 부모의 부모로서 단순한 날씨 의존성으로.

학부모 프로젝트는 Maven에서 두 가지 개념을 사용합니다.

  • 그의 모든 자녀를 말하는 상속 (단순한 날씨 그리고 간단한 webapp) 그의 모든 속성을 상속받을 것입니다 (이 개념은 거의 동일합니다. extends Java).
  • 정의에 의해 정의되는 집계 <modules>. 집계는 프로젝트에서 실행될 모든 명령이 각각에서 실행될 것임을 의미합니다. module.

내가 구축하면 어떻게되는지 (사용하십시오 mvn clean install)에 부모의 예배 규칙서?

  1. Maven은 "컴파일"합니다 부모의 프로젝트 설치 로컬 저장소의 pom.xml.
  2. Maven은 다음을 컴파일합니다 단순한 날씨 프로젝트이지만 부모가있는 것처럼 Maven은 Parent Pom.xml 파일을 로컬 저장소로 보게됩니다. 항아리가 생성되면 로컬 저장소에 설치됩니다.
  3. Maven은 마침내 컴파일합니다 간단한 webapp 프로젝트. Maven은 부모 pom.xml과 같은 일을하지만 단순한 날씨 프로젝트.

세 번째 지점에서 설명 된 statutation은 중요합니다. 간단한 webapp 프로젝트, Maven Will 언제나 그의 모든 의존성을 포함하여 단순한 날씨 - 로컬 (또는 먼) 저장소에서.

그렇기 때문에 당신이 간단한 webapp 건축 및 설치없이 단순한 날씨, Maven은 후자의 프로젝트를 찾지 못하거나 이전 버전을 찾을 수 있습니다.

따라서 Maven과 함께 멀티 모듈 프로젝트에서 작업 할 때는 Root (또는 Parent) 디렉토리에서 항상 빌드 및 설치 명령을 실행하십시오.

이 설명이 충분히 명확하고 귀하의 경우 발생하는 일을 이해하도록 도와주기를 바랍니다. 더 많은 정보를 주저하지 말고 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top