java 추가 - archetypes를 사용하는 새로운 Maven 프로젝트 : javaee-endorsed-api.jar가 POM에 복사되는 이유는 무엇입니까?




1 Answers

이 아티팩트에 대한 종속성이 있기 때문에 컴파일해야합니다.

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Maven 매뉴얼 페이지 는 다음과 같이 제공 된다.

이것은 컴파일과 매우 비슷하지만 런타임에 JDK 또는 컨테이너가 종속성을 제공 할 것으로 기대한다는 것을 나타냅니다. 예를 들어, Java Enterprise Edition 용 웹 응용 프로그램을 빌드 할 때 웹 컨테이너가 해당 클래스를 제공하기 때문에 Servlet API 및 관련 Java EE API에 대한 종속성을 제공된 범위로 설정합니다. 이 범위는 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 전이가 아닙니다.

그래서 내 생각에이 종속성을 복사하는 것은 컴파일에 아무런 영향을 미치지 않습니다.

그러나 archetype의 저자는 어떤 이유로 Java EE 6 API 패키지를 승인 된 디렉토리에 복사하려고합니다. Jetty 서버를 시작하고 "테스트 단계"(예 : JUnit)에서 일부 테스트를 수행하려는 경우이 방법이 유용 할 수 있습니다.

사용하지 않는 경우 제거하십시오.

배포 메이븐

필자는 Maven 아키 타입 ( webapp-javaee6 )을 사용하여 새로운 Java EE 6 프로젝트를 만들었지 만 POM의 build 요소 안에 어떤 것들이 들어 있는지 이해하지 못합니다. 구체적으로 말하면 왜 javaee-endorsed-api.jar 이 승인 된 디렉토리로 복사되는지 이해할 수 없습니다. this 질문에 대한 대답에 따르면 컴파일에 필요하지만 build 할 때 관련 plugin 요소를 제거하면 프로젝트가 올바르게 컴파일됩니다.

javax:javaee-web-api 가 POM에 이미 의존성으로 제공 되었기 때문에 이것을 컴파일에 사용할 수 있습니까?

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>6.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>



Related

java maven

Tags

java   maven