JAVA:Duplicate name in Manifest: Class-Path

使用Struts模型的web可能出现Class-Path重复错误,虽不影响运行但需解决。可先解压struts.jar文件,修改其中META - INF\MANIFEST.MF,只保留一个Class - Path,将修改后的文件另存到文件夹外,通过命令重新打包,用新的struts.jar替换原文件并重启tomcat。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你的web是用Struts模型的,那可能会有这样的错误,
java.util.jar.Attributes read
Duplicate name in Manifest: Class-Path

虽然这个不影响web的运行,但对一个程序员来说,还是应该搞定的.
我上google查了一下,发现下边的网页(英文的)对这个问题有了一个很好的说明,:
http://www.deftcode.com/archives/duplicate_class_path_entries.html 

我只重点的说一下。
1,问题是在struts.jar这个文件。我们要先用winrar解压它,最好解压到struts文件夹内
2,修改struts\META-INF\MANIFEST.MF
只保留一个Class-Path。
Class-Path: commons-beanutils.jar commons-collections.jar commons-dbcp.jar commons-digester.jar commons-logging.jar commons-pool.jar commons-validator.jar jakarta-oro.jar
每个jar用空格隔开
3,把MANIFEST.MF另存到struts文件夹外, 
   运行cmd,进入struts文件夹
   命令jar cmf ../MANIFEST.MF struts.jar
好了,新的struts.jar出来了!用这个新的struts.jar代替原来的,重起tomcat就行了

转载于:https://www.cnblogs.com/microtea/archive/2005/07/24/199029.html

### 解决 Java 中 `ArrayMap` 出现 Duplicate Key 异常的方法 当尝试将具有重复键的对象收集到 Map 中时,Java 会抛出 `java.lang.IllegalStateException: Duplicate key` 异常。为了避免这种情况,在构建 Map 时应处理可能存在的重复键。 #### 使用 `toMap` 方法并提供合并函数 为了防止因重复键而引发的异常,可以利用 Stream API 提供的 `toMap` 方法,并指定第三个参数作为冲突解决策略。此方法签名如下: ```java public static <T, K, U> Collector<T, ?, Map<K, U>> toMap( Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) ``` 下面是一个具体的实现案例[^1]: 假设有一个包含多个对象的列表,这些对象都有一个名为 `id` 的属性作为键,以及另一个属性 `value` 作为值。如果存在相同 ID 的记录,则可以通过定义合并逻辑来决定保留哪一个值或创建新的组合值。 ```java import java.util.*; import java.util.stream.Collectors; class Item { private final String id; private final Integer value; public Item(String id, Integer value) { this.id = id; this.value = value; } public String getId() { return id; } public Integer getValue() { return value; } } public class Main { public static void main(String[] args) { List<Item> items = Arrays.asList( new Item("a", 1), new Item("b", 2), new Item("c", 3), new Item("d", 4), new Item("a", 5) // duplicate key with different value ); Map<String, Integer> itemMap = items.stream().collect(Collectors.toMap( Item::getId, Item::getValue, (existingValue, newValue) -> existingValue + newValue)); // 自定义合并规则 System.out.println(itemMap); } } ``` 上述代码片段展示了如何通过自定义合并操作符 `(existingValue, newValue)` 来避免由于重复键而导致的异常。这里选择了简单地相加两个数值;实际应用中可以根据需求调整该行为。 对于更复杂的场景,还可以考虑其他方式如覆盖旧数据、保存最新版本的数据或是存储所有关联值等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值