高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

jmagick安装-jdk版本问题

目录
  1. 1. jmagick和Imagick安装
  2. 2. 问题处理

这两天一直在处理jmagick图片压缩的问题,各种莫名其妙的jmagick版本不兼容、jdk不兼容。
这里总结一下:

jmagick和Imagick安装

1.环境:centos5.11, jdk1.6
2.先装imagick,再装jmagick,jmagick和Imagick的版本一定要一个版本,不然可能会报no scale to image,确认安装了gcc gcc-c++
jmagick安装包汇总
http://pan.baidu.com/s/1i5FFUCH

安装脚本如下:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#! /bin/bash

mkdir /home/soft/
cd /home/soft/
##下载好jmagick.jar
##http://pan.baidu.com/s/1i5FFUCH
tar -xvf jmagick.tar



yum install libpng* -y
yum install -y perl-devel perl-CPAN
cd support

tar -xvf freetype-2.3.11.tar.gz
cd freetype-2.3.11
./configure &&make &&make install
if [ $? -gt 0 ];then
exit
fi

cd ..


unzip jasper-1.900.1.zip
cd jasper-1.900.1
export CFLAGS="-O2 -fPIC" && ./configure &&make &&make install

if [ $? -gt 0 ];then
exit
fi

cd ..


tar -xvf jpegsrc.v7.tar.gz
cd jpeg-7
./configure &&make &&make install
if [ $? -gt 0 ];then
exit
fi
cd ..

## tar -xvf libpng-1.4.0.tar.gz
# cd libpng-1.4.0
# ./configure &&make &&make install
# if [ $? -gt 0 ];then
#exit
#fi
# cd ..

tar -xvf tiff-3.9.1.tar.gz
cd tiff-3.9.1
./configure &&make &&make install
if [ $? -gt 0 ];then
exit
fi
cd ..

tar -xvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure &&make &&make install
if [ $? -gt 0 ];then
exit
fi
cd ../..

tar -xvf ImageMagick-6.4.0-0.tar.gz
cd ImageMagick-6.4.0
./configure --with-quantum-depth=8 --enable-share --without-x&& make &&make install
if [ $? -gt 0 ];then
exit
fi
cd ..


tar -xvf jmagick-6.4.0-src.tar.gz
cd 6.4.0
./configure --with-java-home=/opt/jdk1.6.0_14/&&make &&make install
if [ $? -gt 0 ];then
exit
fi

cp lib/*.jar $JAVA_HOME/jre/lib/ext/
line=$(cat /etc/profile|wc -l) && line1=$(( $line - 1))&& sed -i "$line1 i LD_LIBRARY_PATH=/usr/local/lib" /etc/profile && source /etc/profile && echo $LD_LIBRARY_PATH

ln -s /usr/local/lib/libjpeg.so.7 /usr/lib64/libjpeg.so.62

OK,其实按照上面的脚本可以一键安装,基本上没问题,
哎…..
由于当时脚本里面没有写jdk的环境变量,而且在做docker镜像的时候dockerfile中设置了env=jdk1.7,在jmagick编译的时候即使指定了
./configure –with-java-home=/opt/jdk1.6.0_14/,也没用,编译出来的jar包还是1.7的,而且jar包比较糊弄人~~

问题处理

按照上面的脚本安装了jmagick,出现了如下坑爹报错:
Alt text

可以看到是jdk版本的问题,项目用的jdk1.6,但是jmagick是1.7的
OK,我们把jmagick-6.4.0.jar拿出来看看
打开jar包,检查MANIFEST.MF文件
Alt text

疑~,是1.6的啊,没有问题,怎么回事~~
再查看class文件版本
Alt text

看到这边major version:51跟MANIFEST.MF中的jdk1.6不对应。
赶紧修改安装脚本,加上jdk环境变量

1
2
3
4
5
export JAVA_HOME=/opt/jdk1.6.0_14
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:
#export LANG=en_US.UTF-8
export PATH=$JAVA_HOME/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH

重新安装了一遍,没问题了!