簡體   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