如何在文件名中没有版本的情况下将依赖项包含到EAR中

Ily*_*lya 5 dependencies maven

我正在使用maven 创建.ear

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-ear-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <finalName>wsformatter-ear</finalName>
    <includeLibInApplicationXml>true</includeLibInApplicationXml>
    <version>1.4</version>
  </configuration>
</plugin>  
Run Code Online (Sandbox Code Playgroud)

.ear中的所有依赖项看起来像joda-time-1.6.2.jar,commons-io-1.4.jar等.

但是,我有依赖,我想要没有版本.例如,我该怎么做,依赖slf4j-api-1.5.6.jar在我的.ear中看起来像slf4j-api.jar

小智 18

我完全同意Michal Kalinowski的观点.但是我遇到了同样的情况,好吧,实际上情况正好相反 - 有人已经将项目配置为排除最终EAR中的版本而我正在寻找一种方法来取消这个,因为它违背了maven的生活方式,所以我'我在网上搜索并发现了这个问题,但我在代码中找到了答案.您可以使用:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <configuration>
        <version>5</version>
    <defaultLibBundleDir>lib</defaultLibBundleDir>
    <fileNameMapping>no-version</fileNameMapping>
   </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

带有标签fileNameMapping的行就是您想要的.我希望这可以提供帮助.


Mic*_*ski 2

基本上,你不能(没有对 Maven 插件配置进行某种黑客攻击),即使你可以 - 只是不这样做。Maven 关于依赖关系的方法和理念是严格而直接的,包括将版本作为文件名后缀的默认约定。它只是立即说明使用的是哪个版本的工件。如果您依赖于某些经常发布的工件,那么您无论如何都必须在 EAR 的 POM 中更新其版本,因此它的“传播”在某种程度上并不是自动执行的。因此,我认为这个文件名后缀没有任何问题。

如果这种频繁更改的需求对您来说是有问题的,也许您应该考虑以某种方式修改这个频繁发布的工件的开发周期?也许您可以延长它在同一快照版本中花费的时间?即使您经常进行“内部”发布(例如 nightbuilds),Maven 也不会强迫您在每个版本中升级版本(就 Maven 发布插件而言)。您可以根据需要继续使用某些 SNAPSHOT 版本。即使在非常快速的敏捷流程(或看板)中,这种“真正的”发布通常每隔几周就会发生一次,并且时间足够长以易于管理。

最后,不是这样的我不会帮助你(或类似的事情)或者不想帮助你。我只是觉得你想对抗 Maven。如果您接受并遵循它的方法和约定,Maven 就会非常强大。根据我的经验,试图解决这个问题意味着问题(迟早)。我已经看到许多项目具有类似 Maven 的 Ant 配置,并且许多开发人员抱怨 Maven 很糟糕。在弄清楚其中的内容后,我对他们说:“Maven 并不糟糕,而是你们的 POM 糟糕”。