【问题标题】:How do you generate module dependencies in MANIFEST.MF for JBoss AS 7 with maven?如何使用 Maven 在 MANIFEST.MF 中为 JBoss AS 7 生成模块依赖项?
【发布时间】:2011-10-05 03:58:56
【问题描述】:

在 JBoss AS 7 中,依赖于 AS 中包含的库的 Web 应用程序必须在 META-INF/MANIFEST.MF 中声明这些依赖项,如下所示:

Dependencies: <package-name>

例子:

Dependencies: org.slf4j

(这类似于 Import-Package: for OSGi。) 更多信息可以在关于migration from older versionsclass loadingimplicit module dependencies for deployments的文章中找到

该项目是使用 Maven 构建的。 AS 中包含的所有依赖项都声明为“已提供”范围。

现在的问题

是否有一种简单的方法可以使用 Maven 自动创建此依赖项列表?

仅应包含声明范围为“提供”的依赖项,因为所有其他依赖项都已包含在 WAR 中。

【问题讨论】:

    标签: java maven jboss dependencies jboss7.x


    【解决方案1】:

    这些依赖项是由 maven 工件没有任何映射的名称声明的。您可能可以使 groupId 与 jboss 模块名称保持同步,但我不确定这是否是个好主意。而且我仍然想不出任何自动化的解决方案。

    但是有一个地方可以手动管理配置,如您在问题中提供的来源之一所述:

       <build>
           ...
           <plugins>
             <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-war-plugin</artifactId>
               <configuration>
                  <archive>
                     <manifestEntries>
                        <Dependencies>org.slf4j</Dependencies>
                     </manifestEntries>  
                  </archive>
               </configuration>
             </plugin>   
           </plugins>
        </build>
    

    我希望有人想出一个插件来使它不那么麻烦。

    【讨论】:

    • 'org.slf4j' 是工件的组 id,所以 Maven 已经知道了。但是,这个组 id 被几个工件使用。 JBoss 是如何知道是哪个 jar 的?
    • @migu - 查看 jboss 根目录中的 modules/org/slf4j/main 文件夹(因为这是由 org.slf4j 依赖项导入的)。并特别查看作为其描述符的 module.xml。如您所见,maven group 和这个模块使用相同的名称只是一个巧合。
    • 正是我想要的!
    • 这似乎是目前唯一可用的解决方案。新的 JBoss 模块系统的缺点是我们必须在 POM 中维护两组重叠的依赖关系,并且我们必须手动查找可以使用的模块。
    • 这就是我的理解:好处应该是将模块分离到单独的类加载器作用域中。这使得在同一个 AS 中使用不同的 jar 版本成为可能。
    【解决方案2】:

    此代码会在您的 MANIFEST.MF 中自动添加所有编译依赖项

    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-war-plugin</artifactId>
       <version>2.4</version>
       <configuration>
          <archive>
             <manifest>
                <addClasspath>true</addClasspath>
             </manifest>
          </archive>
       </configuration>
    </plugin>
    

    更多信息在这里:http://maven.apache.org/plugins/maven-war-plugin/examples/war-manifest-guide.html

    【讨论】:

    • 正如 Michał Minicki 已经指出的那样,maven 组和某些模块具有相同的名称只是巧合。因此,添加类路径没有帮助,因为 JBoss AS 需要模块名称。
    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2011-07-31
    相关资源
    最近更新 更多