Maven 多模块项目的结构化。如何包装模块?
我正在用maven创建一个多模块项目的结构。 家长的pom:Maven 多模块项目的结构化。如何包装模块?,maven,jakarta-ee,Maven,Jakarta Ee,我正在用maven创建一个多模块项目的结构。 家长的pom: <?xml version="1.0" encoding="UTF-8"?> <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 ht
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven- 4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cat.base.gpt</groupId>
<artifactId>gpt</artifactId>
<version>0.0.1</version> <!-- application version -->
<packaging>pom</packaging>
<name>gpt</name>
<parent>
<groupId>cat.base.baseframe</groupId>
<artifactId>projecte-pare-baseframe</artifactId>
<version>0.0.11.a</version>
</parent>
<modules>
<module>gpt.domini</module>
<module>gpt.ui</module>
<module>gpt.logica</module>
<module>gpt.ejb</module>
<module>gpt.ear</module>
</modules>
<dependencies>
<!-- dependencies pel testeig TDD -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5-rc1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.kubek2k</groupId>
<artifactId>springockito</artifactId>
<version>1.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<!-- A més, en el cas de provatures UI, s'ha d'afegir la següent dependència:-->
<dependency>
<groupId>cat.base.baseframe</groupId>
<artifactId>baseframe-test-swf</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
好的,第一个问题,我把所有依赖项都放在paren的pom中,这真的正确吗
最有趣的是,我不知道如何编译grafic interfade项目,我称之为ui,最好创建一个war或使用所有必要的ui+logica+domini+ejb创建和ear,我对此有点困惑,我习惯于使用已经创建的结构化项目。我希望你能理解我的问题,我把pom的其余部分都放在一旁。泰
pom's gpt.domini.
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gpt.domini</groupId>
<artifactId>gpt.domini</artifactId>
<packaging>jar</packaging>
<name>gpt.domini</name>
<description>Definició del model de dades i de la façana del servei</description>
</project>
波姆耳
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gtp.ear</groupId>
<artifactId>gpt.ear</artifactId>
<name>gpt.ear</name>
<packaging>ear</packaging>
<description>Paquet de l'aplicació J2EE</description>
<dependencies>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.domini</artifactId>
<version>${project.parent.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.ejb</artifactId>
<version>${project.parent.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.logica</artifactId>
<version>${project.parent.version}</version>
<type>jar</type>
</dependency>
</dependencies>
</project>
pom的gpt.logica
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gtp.logica</groupId>
<artifactId>gpt.logica</artifactId>
<name>climbing.logica</name>
<packaging>jar</packaging>
<description>Implementació del servei</description>
<dependencies>
<!-- de moment nomes el domini -->
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.domini</artifactId>
<version>${project.parent.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
pom的gpt.ejb
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gtp.ejb</groupId>
<artifactId>gpt.ejb</artifactId>
<name>gpt.ejb</name>
<packaging>ejb</packaging>
<description>Publicació d'un servei en forma EJB</description>
<dependencies>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.domini</artifactId>
<version>${project.parent.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.logica</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.logica</artifactId>
<version>${project.parent.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-annotations-ejb3</artifactId>
<version>4.2.2.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.client</groupId>
<artifactId>jbossall-client</artifactId>
<version>4.2.3.GA</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
pom的gpt.logica
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gtp.logica</groupId>
<artifactId>gpt.logica</artifactId>
<name>climbing.logica</name>
<packaging>jar</packaging>
<description>Implementació del servei</description>
<dependencies>
<!-- de moment nomes el domini -->
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${project.parent.artifactId}.domini</artifactId>
<version>${project.parent.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
pom的gpt.ui
这里是spring rich.faces的所有依赖项..还是在家长的pom中更好?
像战争一样包装??还是在de模块耳内??泰
好的,第一个问题,我把所有依赖项都放在paren的pom中,是这样的吗
真的对吗
不,您的共享依赖项应该放在ear pom中。在其他POM中,您必须使用提供的引用共享依赖项
例如,在您的耳朵pom中添加双亲:
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
</dependency>
例如,在logica和ui模块pom中,添加以下行:
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
这样,依赖项工件在ear包中只添加一次
最有趣的是,我不知道如何编译grafic
交互项目,我称之为ui,最好创建一场战争或创建
ear具备所有必要的ui+logica+domini+ejb,我有点
对此感到困惑的是,我过去常常处理已经结构化的项目
创建。我希望不理解我的问题,我把pom的其余部分放到
留心。泰
我不知道我是否理解正确。EAR更适合具有多个war和/或ejb模块的项目。在您的情况下,您可以完全摆脱模块化,使用单个war包
好的,第一个问题,我把所有依赖项都放在paren的pom中,是这样的吗
真的对吗
不,您的共享依赖项应该放在ear pom中。在其他POM中,您必须使用提供的引用共享依赖项
例如,在您的耳朵pom中添加双亲:
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
</dependency>
例如,在logica和ui模块pom中,添加以下行:
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
这样,依赖项工件在ear包中只添加一次
最有趣的是,我不知道如何编译grafic
交互项目,我称之为ui,最好创建一场战争或创建
ear具备所有必要的ui+logica+domini+ejb,我有点
对此感到困惑的是,我过去常常处理已经结构化的项目
创建。我希望不理解我的问题,我把pom的其余部分放到
留心。泰
我不知道我是否理解正确。EAR更适合具有多个war和/或ejb模块的项目。在您的情况下,您可以完全摆脱模块化,使用单个war包。最后,这是my ear的pom
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gpt.ear</groupId>
<artifactId>gpt.ear</artifactId>
<name>gpt.ear</name>
<packaging>ear</packaging>
<description>Paquet de l'aplicació J2EE</description>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.domini</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ejb</artifactId>
<version>${project.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.logica</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ui</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
<description>GPT</description>
<displayName>Gestió posicions tributarias</displayName>
<encoding>${project.build.sourceEncoding}</encoding>
<version>1.4</version>
<generateApplicationXml>true</generateApplicationXml>
<modules>
<ejbModule>
<groupId>${project.groupId}</groupId>
<artifactId>${project.parent.artifactId}.ejb</artifactId>
<bundleFileName>${project.parent.artifactId}-ejb.jar</bundleFileName>
</ejbModule>
<jarModule>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.logica</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<webModule>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ui</artifactId>
<contextRoot>/gpt</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<excludeScope>runtime</excludeScope>
</configuration>
</plugin>
</plugins>
</build>
</project>
最后,这是我耳朵的pom
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>gpt</artifactId>
<groupId>cat.base.gpt</groupId>
<version>0.0.1</version>
</parent>
<groupId>cat.base.gpt.ear</groupId>
<artifactId>gpt.ear</artifactId>
<name>gpt.ear</name>
<packaging>ear</packaging>
<description>Paquet de l'aplicació J2EE</description>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.domini</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ejb</artifactId>
<version>${project.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.logica</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ui</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
<description>GPT</description>
<displayName>Gestió posicions tributarias</displayName>
<encoding>${project.build.sourceEncoding}</encoding>
<version>1.4</version>
<generateApplicationXml>true</generateApplicationXml>
<modules>
<ejbModule>
<groupId>${project.groupId}</groupId>
<artifactId>${project.parent.artifactId}.ejb</artifactId>
<bundleFileName>${project.parent.artifactId}-ejb.jar</bundleFileName>
</ejbModule>
<jarModule>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.logica</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<webModule>
<groupId>${project.groupId}</groupId>
<artifactId>gpt.ui</artifactId>
<contextRoot>/gpt</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<excludeScope>runtime</excludeScope>
</configuration>
</plugin>
</plugins>
</build>
</project>
虽然已经有了一个公认的答案,但我认为值得向你们提供更多信息,因为在我看来,提问者和公认的答案在Maven中都被不同的概念搞乱了 1聚合与父POM Maven中有两个概念经常混淆。聚合(也称为多模块POM)和父POM是不相关的,尽管可以使用一个POM同时用于这两个目的 多模块项目旨在描述项目之间的聚合关系,以便我们可以将多个相关项目作为一个整体构建,并且所有子项目都构建在同一个反应器中。父项目旨在提供共享项目设置。它甚至可以存在于项目结构之外,例如,我可能有一个公司级的母公司POM 我个人建议使用多模块POM来声明项目的聚合层次结构,并使用单独的父POM来声明共享设置 i、 e 2 POM与EAR的共享依赖关系 同样,这是两个独立的概念 在父POM中放置依赖项是可以的。当您把它放在那里时,这意味着继承的项目将具有这种依赖性。这是没有对错的,只要你们知道你们个人在做什么,我用的是不同的方式,后面会描述 然而,无论是把共享的罐子放在耳朵里,保持瘦的战争,还是用一个普通的耳朵来进行一场全面的战争,都与你的依赖性无关。更多的是关于EAR的包装策略。因此,仅仅因为要将项目打包为skinny war,就改变Maven依赖性的范围,这样的方法只会搞乱Maven依赖性的整个概念。更可怕的是,在创建EAR时,您需要找出其包含的WAR的所有依赖项,并将其逐个添加到EAR POM中,这无疑不是最佳解决方案 遗憾的是,目前的Maven EAR插件仍然没有办法 宣布一个瘦的战争包装策略。但是,有一些变通方法允许您这样做,而不会影响Maven依赖范围 更新:skinny war receipe似乎已更新,其中一个解决方案似乎已消失。这是将WAR类型POM包含为POM类型,这样我们就不需要在EAR中再次声明依赖项 3在父POM中使用共享依赖项 正如我前面提到的,将依赖项放在父项中是没有对错的。然而,您应该知道,这种方式实际上意味着所有继承的项目都将具有这种依赖性,这在很大程度上是不正确的 例如,我在foo下有一个foo-a和foo-b项目,这两个项目都继承了foo父项目。假设foo-a使用的是spring-core,而foo-b的整个逻辑与之无关,如果您将spring-core作为foo父级中的依赖项,那么当您查看foo-b时,它不必具有与spring-core无关的依赖项 正确的方法是只在父POM中包含应该在所有继承项目中共享的依赖项和其他设置。例如,与单元测试相关的依赖项可能是一个不错的选择。集成测试的依赖关系可能是另一个例子 然而,这并不意味着我们应该在每个项目中单独声明依赖项。最大的问题之一是,这种方法很难在整个项目中维护相同版本的依赖关系 为了解决这个问题,我的建议是在父POM中使用dependencyManagement,它声明版本,可能还有其他设置,比如scope、excludes。声明DependencyManager不会在继承的POM中引入实际的依赖项。它只是声明:如果您声明这样的依赖关系,这将是要使用的设置。在每个继承的POM中,只需声明依赖项的组和工件以及一些特定于项目的设置,这样您就可以遵循父POM中声明的版本 可能有点难以理解,下面是一个例子: 富父母 福阿
虽然已经有了一个公认的答案,但我认为值得向你们提供更多信息,因为在我看来,提问者和公认的答案在Maven中都被不同的概念搞乱了 1聚合与父POM Maven中有两个概念经常混淆。聚合(也称为多模块POM)和父POM是不相关的,尽管可以使用一个POM同时用于这两个目的 多模块项目旨在描述项目之间的聚合关系,以便我们可以将多个相关项目作为一个整体构建,并且所有子项目都构建在同一个反应器中。父项目旨在提供共享项目设置。它甚至可以存在于项目结构之外,例如,我可能有一个公司级的母公司POM 我个人建议使用多模块POM来声明项目的聚合层次结构,并使用单独的父POM来声明共享设置 i、 e 2 POM与EAR的共享依赖关系 同样,这是两个独立的概念 在父POM中放置依赖项是可以的。当您把它放在那里时,这意味着继承的项目将具有这种依赖性。这是没有对错的,只要你们知道你们个人在做什么,我用的是不同的方式,后面会描述 然而,无论是把共享的罐子放在耳朵里,保持瘦的战争,还是用一个普通的耳朵来进行一场全面的战争,都与你的依赖性无关。更多的是关于EAR的包装策略。因此,仅仅因为要将项目打包为skinny war,就改变Maven依赖性的范围,这样的方法只会搞乱Maven依赖性的整个概念。更可怕的是,在创建EAR时,您需要找出其包含的WAR的所有依赖项,并将其逐个添加到EAR POM中,这无疑不是最佳解决方案 遗憾的是,目前的Maven-EAR插件仍然没有办法宣布一个精简的战争包装策略。但是,有一些变通方法允许您这样做,而不会影响Maven依赖范围 更新:skinny war receipe似乎已更新,其中一个解决方案似乎已消失。这是将WAR类型POM包含为POM类型,这样我们就不需要在EAR中再次声明依赖项 3在父POM中使用共享依赖项 正如我前面提到的,将依赖项放在父项中是没有对错的。然而,您应该知道,这种方式实际上意味着所有继承的项目都将具有这种依赖性,这在很大程度上是不正确的 例如,我在foo下有一个foo-a和foo-b项目,这两个项目都继承了foo父项目。假设foo-a正在使用springcore,而foo-b的整个逻辑与之无关,如果您将springcore作为依赖项放在foo父级中,当您查看foo-b时,它不必要地具有unrela ted依赖于spring核心 正确的方法是只在父POM中包含应该在所有继承项目中共享的依赖项和其他设置。例如,与单元测试相关的依赖项可能是一个不错的选择。集成测试的依赖关系可能是另一个例子 然而,这并不意味着我们应该在每个项目中单独声明依赖项。最大的问题之一是,这种方法很难在整个项目中维护相同版本的依赖关系 为了解决这个问题,我的建议是在父POM中使用dependencyManagement,它声明版本,可能还有其他设置,比如scope、excludes。声明DependencyManager不会在继承的POM中引入实际的依赖项。它只是声明:如果您声明这样的依赖关系,这将是要使用的设置。在每个继承的POM中,只需声明依赖项的组和工件以及一些特定于项目的设置,这样您就可以遵循父POM中声明的版本 可能有点难以理解,下面是一个例子: 富父母 福阿
谢谢你回答阿尔夫。这很难理解,但我试着告诉你们一些事情。我相信ear中的共享依赖项,虽然对大多数容器都有效,但不是JEE标准。标准的方法是简单地声明依赖项,反过来它将创建与依赖项的战争。仅当容器应提供JAR时,才应使用提供的范围,例如那些JEE API JAR。而且,parent中的共享依赖项和EAR中的共享JAR只是两个不相关的概念,似乎你把它们混在了一起。@AdrianShum,所以最好将所有依赖项放在parent的pom中,并在模块中放置提供范围的依赖项。前提是它对我有好处,因为jboss容器提供了应用程序。@AdrianShum:我不这么认为。根据JavaEE规范,.ear文件可能包含一个目录,其中包含打包在JAR文件中的库。.ear文件的部署描述符的library directory元素包含此目录的名称。如果未指定库目录元素,或者.ear文件不包含部署描述符,则使用名为lib的目录。此目录中扩展名为.jar的所有文件都必须可用于EAR文件中打包的所有组件,包括应用程序客户端。@AdrianShum:此外,为了避免重复,您只能使用提供的作用域,否则您在war和EAR中都有相同的jar。此外,如果您将依赖项放在父pom中,它们将不会添加到ear package.ty中以回答Alf。这很难理解,但我试着告诉你们一些事情。我相信ear中的共享依赖项,虽然对大多数容器都有效,但不是JEE标准。标准的方法是简单地声明依赖项,反过来它将创建与依赖项的战争。仅当容器应提供JAR时,才应使用提供的范围,例如那些JEE API JAR。而且,parent中的共享依赖项和EAR中的共享JAR只是两个不相关的概念,似乎你把它们混在了一起。@AdrianShum,所以最好将所有依赖项放在parent的pom中,并在模块中放置提供范围的依赖项。前提是它对我有好处,因为jboss容器提供了应用程序。@AdrianShum:我不这么认为。根据JavaEE规范,.ear文件可能包含一个目录,其中包含打包在JAR文件中的库。.ear文件的部署描述符的library directory元素包含此目录的名称。如果未指定库目录元素,或者.ear文件不包含部署描述符,则使用名为lib的目录。此目录中扩展名为.jar的所有文件都必须可用于EAR文件中打包的所有组件,包括应用程序客户端。@AdrianShum:此外,为了避免重复,您只能使用提供的作用域,否则您在war和EAR中都有相同的jar。此外,如果将依赖项放在父pom中,它们将不会添加到ear包中。