簡體   English   中英

指定應用程序容器提供JAR的正確方法是什么,因此它不應包含在EAR或WAR文件中?

[英]What is the proper way to specify that a JAR is provided by the application container so it should not be included in an EAR or WAR file?

我有一個JAR依賴於應用程序容器提供的另一個JAR(因此它不包含在WAR文件中)。 但是當該組件用於不同的獨立應用程序時,它需要包含在包中。 指定JAR是否由應用程序容器提供的正確方法是什么,因此它不應包含在EAR或WAR文件中,但包裝在獨立應用程序中時包含在內?

這是依賴樹:

WAR(app1) JAR(app2)
 +        +
 |        |
 v        v
 Dependency
   +
   |
   v
Dependency (provided by the application server)

這是JAR的pom.xml,它依賴於應用程序容器提供的JAR,但在構建獨立應用程序時是必需的。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>testgroup</groupId>
    <artifactId>moduledao</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.oracle.jdbc</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2</version>
        </dependency>
    </dependencies>
</project>

這是Web應用程序的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>testgroup</groupId>
    <artifactId>mywebapp</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>testgroup</groupId>
            <artifactId>moduledao</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

這是獨立應用程序的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>testgroup</groupId>
    <artifactId>standaloneapp</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>testgroup</groupId>
            <artifactId>moduledao</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

正如其他人所說,你需要設定范圍。

為了在2種不同的情況下使用它,您需要聲明2個配置文件,基於應用程序容器的配置文件和獨立應用程序,它們將具有名為profile.scope 在第一種情況下,它將在第二種情況下providedcompile ,您必須分別使用每個配置文件,具體取決於您需要運行的情況。

......這樣的

<profile>
    <id>appServer</id>
        <profile.scope>provided</profile.scope>
    </properties>
</profile>
<profile>
    <id>standaloneApp</id>
        <profile.scope>compile</profile.scope>
    </properties>
</profile>

接着

<scope>${profile.scope}</scope>

你需要三個項目:

  1. “核心”:具有默認包裝的所有邏輯的應用程序核心
  2. “web”:帶有war包裝的Web應用程序
  3. “standalone”:具有默認包裝的獨立應用程序

在核心pom.xml您可以使用默認范圍定義應用程序邏輯所需的所有依賴項。

在web pom.xml您可以使用默認范圍定義對核心的依賴關系,另外還可以使用<scope>provided</scope>定義容器提供的所有依賴關系。 這些額外的依賴項將基本上覆蓋核心中的依賴項,並最終不會捆綁在.war 如果您有任何測試,它們將使用provided依賴項運行 - 如果版本不同並且您希望確保您的應用程序與應用程序服務器上的版本一起使用,這可能很重要。 此項目還可能包含一些用於在應用程序容器中運行的其他代碼。

在獨立的pom.xml您可以定義對核心的依賴性,以及它獨立運行所需的任何依賴項,例如命令行解析庫等。此外,您將在此處定義將其作為獨立應用程序運行的設置,例如maven-jar-plugin包含清單中的主類。 此項目還可能包含一些用於獨立運行的其他代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM