当前位置: 首页 > 面试题库 >

使用原型的新Maven项目:为什么在POM中复制javaee-endorsed-api.jar?

孔安福
2023-03-14
问题内容

我已经使用Maven原型(webapp-javaee6)创建了一个新的Java EE
6项目,但是不明白为什么某些东西放在buildPOM元素中。具体来说,我不明白为什么将“” javaee-endorsed- api.jar复制到认可目录。根据对这个问题的回答,这是编译所必需的,但是当我删除下的相关plugin元素时,我的项目可以正常编译build

由于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>

问题答案:

它应该编译,因为对此工件也有依赖性:

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

Maven手册页中 提供的 描述如下:

这很像编译,但是表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise
Edition构建Web应用程序时,您将对Servlet API和相关Java EE
API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此作用域仅在编译和测试类路径上可用,并且不可传递。

因此,我认为复制此依赖项不会影响编译。

但是原型的作者出于某种原因希望将Java EE 6
API包复制到认可的目录中。如果您决定启动Jetty服务器并在“测试阶段”中进行一些测试(例如,使用JUnit),这可能会有所帮助。

如果您不使用它-只需将其删除。



 类似资料:
  • 问题内容: 我试图弄清楚Maven的用途,并且有很多文章介绍了Maven的功能和用途。但是我只是不能从生产力的角度理解Maven的实际使用。 从我在学校项目中所习惯的,就是在Eclipse中创建一个新的Java项目,编写您的代码,创建一个.war(如果基于Web),然后将代码粘贴到Tomcat的webapps文件夹中并启动服务器! 所以, Maven在哪里出现?我已经使用过Ant,并且了解Ants

  • 我正在创建一个maven原型。在这里,我有一个原型项目,当用户调用以下命令时,它会为用户创建: MVN原型:生成-DArchetypeGroupId=xxx-DArchetypeArtifactId=Archtype-yyyy-DArchetypeVersion=1.1.0-S5-SNAPSHOT-DgroupId=zzz-DartifactId=pro11 在prototype pom中,我想使

  • 问题内容: “ Maven->更新项目… ”在Eclipse中做什么? 问题答案: 它将Eclipse项目设置与pom的设置同步。例如,如果您更改重要的插件设置(例如输出的Java版本),则会发现Eclipse将要求您更新项目,此后,项目中已配置的Java运行时将进行更改以反映您的Maven pom所指示的内容。 这是要记住的重要事项:Maven pom是这种项目设置的领导者。如果要更改设置,请尝

  • 问题内容: 我想将jaxws升级到2.2(jdk1.6与jaxws 2.1捆绑在一起)。我的jdk是(我没有安装public jre): 在jaxws自己的文档中,他们解释了如何做到这一点: 解决此问题的一种方法是将jaxws-api.jar和jaxb-api.jar复制到JRE认可的目录中,即 但是我不确定这对我的安装是否有任何影响。对于初学者,我只定义了。而且文件夹不存在,所以我创建并复制了两

  • 我在父POM中声明 此外,儿童pom使用 一切正常吗?但是当我在type = pom中使用这种依赖关系时 我有错误 如何在dependencyManagement中用type = POM $ { Jboss-javaee-7.0 . version }声明一个依赖项如果我在根中带有Jboss-javaee-7.0,那么运行