gpt4 book ai didi

java - 指定 JAR 由应用程序容器提供以使其不应包含在 EAR 或 WAR 文件中的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 04:43:06 25 4
gpt4 key购买 nike

我有一个 JAR 依赖于应用程序容器提供的另一个 JAR(因此它不包含在 WAR 文件中)。但是当该组件在不同的独立应用程序中使用时,它需要包含在包中。指定 JAR 由应用程序容器提供的正确方法是什么,因此它不应包含在 EAR 或 WAR 文件中,而是在打包到独立应用程序中时包含?

这是依赖树:

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

这是依赖于应用程序容器提供的 JAR 的 JAR 的 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>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>

这是网络应用程序的 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 个配置文件,基于应用程序容器的一个和独立应用程序的一个,后者将具有一个名为 e.g. 的属性。 配置文件范围。在第一种情况下,它将被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>

关于java - 指定 JAR 由应用程序容器提供以使其不应包含在 EAR 或 WAR 文件中的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38361865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com