문제
이전 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
)에 부모의 예배 규칙서?
- Maven은 "컴파일"합니다 부모의 프로젝트 설치 로컬 저장소의 pom.xml.
- Maven은 다음을 컴파일합니다 단순한 날씨 프로젝트이지만 부모가있는 것처럼 Maven은 Parent Pom.xml 파일을 로컬 저장소로 보게됩니다. 항아리가 생성되면 로컬 저장소에 설치됩니다.
- Maven은 마침내 컴파일합니다 간단한 webapp 프로젝트. Maven은 부모 pom.xml과 같은 일을하지만 단순한 날씨 프로젝트.
세 번째 지점에서 설명 된 statutation은 중요합니다. 간단한 webapp 프로젝트, Maven Will 언제나 그의 모든 의존성을 포함하여 단순한 날씨 - 로컬 (또는 먼) 저장소에서.
그렇기 때문에 당신이 간단한 webapp 건축 및 설치없이 단순한 날씨, Maven은 후자의 프로젝트를 찾지 못하거나 이전 버전을 찾을 수 있습니다.
따라서 Maven과 함께 멀티 모듈 프로젝트에서 작업 할 때는 Root (또는 Parent) 디렉토리에서 항상 빌드 및 설치 명령을 실행하십시오.
이 설명이 충분히 명확하고 귀하의 경우 발생하는 일을 이해하도록 도와주기를 바랍니다. 더 많은 정보를 주저하지 말고 ...