繁体   English   中英

Maven:在war / WEB-INF / lib中找不到本地依赖文件

[英]Maven: Local dependecy file not found into war/WEB-INF/lib

我添加了本地依赖库( jar文件):

<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/ojdbc7-12.1.0.2.jar</systemPath>
</dependency>

一切正常,直到maven生成战争伪像为止。

我在生成的war文件中查找,但是里面没有jar依赖项。

有任何想法吗?

我知道我可以使用maven installfile 我需要使用这种依赖关系声明来解决这个问题。

Maven文档中

system :此作用域与提供的作用域相似,只是您必须提供显式包含它的JAR。 该工件始终可用,并且不会在存储库中查找。

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

似乎系统范围需要容器或JDK提供依赖关系作为提供的范围。 因此,该依赖项未打包到WAR文件中。

您可以使用maven-war-plugin将依赖项打包到lib文件夹中,如下所示:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        ...
        <webResources>
            <resource>
                <directory>libs</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                    <include>ojdbc7-12.1.0.2.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

WAR是Servlet容器(如Tomcat,Glassfish,JBoss(...))的Web存档。 它们由Servlet规范指定。 规范指出,数据源(数据库)在Servlet容器的字段中。

(...)键入javax.sql.DataSource,在使组件对应用程序可用之前,容器将为其引用数据源。

您应该将数据库驱动程序放置到servlet容器而不是Web应用程序。

作为Maven构建的一部分,编译范围中的依赖项会自动添加到目标的WEB-INF / lib中。 系统范围的依赖性不是,系统范围的依赖性必须通过定义明确提供。 有关以下网址的更多信息

带有依赖项的Maven 2程序集:不包括作用域“系统”下的jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM