MAVEN-ANDROID-ARCHETYPES 에 대해서

2013-10-10 01:56

자바를 이제 막 공부하기 시작한 사람입니다. C#만쓰다가 자바를 공부하려니 익숙하지가 않아서 당혹스럽네요. 오픈소스를 받아서 이클립스로 열어보려니 거기서부터 막혀서 여차여차하다 메이븐을 알게되었고, 메이븐 책(자바 세상의 빌드를...)의 저자이신 자바지기님의 github에 들렀다가 이곳을 알게 되었습니다.

여기(http://stand.spree.de/wiki_details_maven_archetypes)를를) 따라하면 안드로이드 템플릿 프로젝트(my-android-application)를 생성할 수 있는데요.

문제는 생성된 pom.xml에서 아래와 같은 빌드 플러그인이 선언이 되어있는데

	<build>
		<finalName>${project.artifactId}</finalName>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>com.jayway.maven.plugins.android.generation2</groupId>
					<artifactId>android-maven-plugin</artifactId>
					<version>${android.plugin.version}</version>
					<extensions>true</extensions>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>com.jayway.maven.plugins.android.generation2</groupId>
				<artifactId>android-maven-plugin</artifactId>
				<configuration>
					<sdk>
						<platform>16</platform>
					</sdk>
				</configuration>
			</plugin>
		</plugins>
	</build>

mvn help:effective-pom 실행 후 이 부분을 살펴보면, 아래와 같이 이 추가되어 있는 것을 볼 수 있습니다. 어떻게 이것이 가능한가요? 분명 위 pom.xml은 명시적인 부모를 가지고 있지 않습니다. 최상위(디폴트) pom.xml를 따르게 됩니다.

true이 어떤 단서를 주는 것 같은데요. pom 레퍼런스(http://maven.apache.org/pom.html#Extensions)를를) 봐도 명확치가 않네요. 혹 질문이 잘못되었거나, 이해가 안 가시면 의견 남겨 주세요.

<plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <version>3.6.0</version>
    <extensions>true</extensions>
    <executions>
      <execution>
        <id>default-internal-integration-test</id>
        <phase>integration-test</phase>
        <goals>
          <goal>internal-integration-test</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-generate-sources</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>generate-sources</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-internal-pre-integration-test</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>internal-pre-integration-test</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-emma</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>emma</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-dex</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>dex</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-proguard</id>
        <phase>process-classes</phase>
        <goals>
          <goal>proguard</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
      <execution>
        <id>default-apk</id>
        <phase>package</phase>
        <goals>
          <goal>apk</goal>
        </goals>
        <configuration>
          <sdk>
            <platform>16</platform>
          </sdk>
        </configuration>
      </execution>
    </executions>
    <configuration>
      <sdk>
        <platform>16</platform>
      </sdk>
    </configuration>
  </plugin>

3개의 의견 from SLiPP

2013-10-10 09:17

http://maven.apache.org/pom.html#Extensions 문서를 보면 다음과 같은 내용이 있네요.

as well as make plugins active which make changes to the build lifecycle.

저도 extension을 사용해 보지 않았는데요. extension을 사용할 경우 메이븐이 기본으로 가지는 빌드 라이프사이클을 확장할 수 있는 기능이네요. 따라서 이와 같이 설정할 경우 android-maven-plugin의 설정이 기본 라이프사이클에 추가되는 구조로 이해하시면 될 듯 합니다.

2013-10-10 11:42

답변 감사드립니다. 현재로선 그 정도로 이해하고 넘어가는게 저에게는 맞을 듯 합니다. 자바 걸음마 단계라... 차후에 메이븐 이외의 다른 것들에 대해 익숙해진 후에 좀 더 깊이 알아봐야할 것 같습니다.

책의 저자님과 이렇게 질답을 할 수 있다니 영광입니다. 책을 본 후, 몇가지 의문점이 있는데 기회가 되면 질문을 드리겠습니다.

2013-10-11 15:21

메이븐 document의 Lifecycle관한 내용에서 질문관련한 내용이 언급되어 있네요. 혹시나 해서 링크 남깁니다.

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Packaging (인용) "Note that for some packaging types to be available, you may also need to include a particular plugin in the section of your POM and specify true for that plugin. One example of a plugin that requires this is the Plexus plugin, which provides a plexus-application and plexus-service packaging."

android-maven-plugin의 apk 패키징 타입이 여기에 속하겠네요.

의견 추가하기

연관태그

← 목록으로