关于解决maven编译缺少 rt.jar 包的问题

最近公司项目中的消息队列所传输的消息为Map类型,而在消费端的监听队列使用Message.getBody()的方法拿到的队列是byte[]类型,我们需要把他转化为Map类型后通过回调函数转发给客户,因此我便写了一个工具类,功能分别有:

  1. 判空
  2. Map类型转化为byte[]类型
  3. byte[]类型转化为Map类型

⭐工具类代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.fc.v2.util;

import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;

import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Map;
import java.util.Set;

public class MapUtil {
public static Map<String, Object> nullToEmpty(Map<String, Object> map) {
Set<String> set = map.keySet();
if(set != null && !set.isEmpty()) {
for(String key : set) {
if(map.get(key) == null) { map.put(key, ""); }
}
}
return map;
}

public static Map<String,String> bytesToMap(byte[] bytes) {
try {
ByteInputStream byteInputStream = new ByteInputStream(bytes, bytes.length);
ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
Map<String,String> map = (Map<String, String>) objectInputStream.readObject();
return map;
} catch (Exception e) {
System.out.println("shibai");
}

return null;
}
public static byte[] mapToBytes(Map<String,String> map) {
try {
byte[] bytes = null;
//map转byte[]
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(map);
bytes = outputStream.toByteArray();
return bytes;
} catch (Exception e) {
System.out.println("shibai");
}
return new byte[0];
}

}

⭐引发的问题

由上述代码中,我们可以看到,我们使用了com.sun.xml.internal.messaging.saaj.util这个包,当我们打包程序的时候,程序就报了一个错:“com.sun.xml.internal.messaging.saaj.util 不存在”。上网搜了很多解决方案,都是答不到点子上,后来经过总结以后,我发现其实就是标题所说的“maven编译缺少 rt.jar 包”。因此我们的解决思路也清晰了,那就是把rt.jar这个包导进去。
当发布到服务器上以后,还会报找不到包的错:“java.lang.NoClassDefFoundError: com/sun/xml/internal/messaging/saaj/util/ByteInputStream”,那么我们就需要在meavn上加依赖。

⭐解决方案

在POM文件中加入如下代码即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<!-- 将jdk的依赖jar打入项目中,这样项目中使用的jdk的依赖就尅正常使用 -->
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>

⭐寄望

我写博客的初心还是希望通过踩坑能提升自己的同时也可以帮助到其他的程序员朋友,上面的工具类如果有需要复制即可。