5

我正在使用 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>  

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

而且,我有依赖项,我希望没有版本。例如,我该怎么做,依赖slf4j-api-1.5.6.jar在我的.ear中看起来像slf4j-api.jar

4

2 回答 2

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>

带有标签fileNameMapping的行就是你想要的。我希望这会有所帮助。

于 2012-10-17T21:56:28.557 回答
2

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

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

最后,不是这样的,我不会帮助你(或类似的事情)或不想。我只是认为你试图反对 Maven。如果你接受并遵循它的方法和约定,Maven 真的很强大。根据我的经验,试图解决这个问题(迟早)意味着问题。我已经看到许多项目具有类似 Maven 的 Ant 配置,并且许多开发人员抱怨 Maven 很烂。在弄清楚那里的东西之后,我说:“Maven 不烂,你的 POM 可以”。

于 2012-04-10T09:49:48.240 回答