java8 GDAL环境构建

构建java8 GDAL 环境

1、拉取 ubuntu 镜像

1
docker pull ubuntu

2、安装 java8 环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 解压压缩包
tar -zxvf jdk-8u291-linux-x64.tar.gz

# 设置环境变量 (若 vim command not found 可以先 apt-get update 再 apt-get install vim 安装一下)
vim /etc/profile
# 在最后加上
export JAVA_HOME=/data/docker/java8/jdk1.8.0_291 #(自己 jdk 解压的路径)
export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

# 保存之后

vim ~/.bashrc

# 在最后加上
source /etc/profile

# 保存之后,刷新一下环境变量
source ~/.bashrc

# 查看java 版本
java -versoion

3、安装 gcc 和 g++

1
2
3
4
5
6
7
apt-get update
apt-get install gcc -y
apt-get install g++ -y

# 补充缺失的环境依赖(可能需要选择时区)
apt-get install pkg-config
apt-get install libsqlite3-dev

4、安装 sqlite

1
apt-get install sqlite

5、安装 proj6

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
wget http://download.osgeo.org/proj/proj-6.3.1.zip

# 安装 zip
apt-get install zip

# 解压压缩包
unzip proj-6.3.1.zip
cd proj-6.3.1

# 生成 makefile
./configure

# 安装 make 编译
apt-get install gcc automake autoconf libtool make

# 编译
make

# 安装
make install

# 更新环境变量
ldconfig

# 测试安装是否成功
proj --version

6、安装 GDAL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载
wget http://download.osgeo.org/gdal/3.0.4/gdal-3.0.4.tar.gz

# 解压
tar -zxvf gdal-3.0.4.tar.gz

# 切换目录
cd gdal-3.0.4

# 生成makefile
./configure
# 编译
make
# 安装
make install

# 更新环境变量
ldconfig

7、安装gdal4java

1
2
3
4
5
6
7
8
9
10
# 还可安装 gdal-bin libgdal-dev
apt-get install libgdal-java

# gdal java 接口文件路径下,libgdaljni.so
cd /usr/lib/jni
# java接口文件libgdaljni.so,拷贝到/urs/lib下
cp /usr/lib/jni/libgdaljni.so /usr/lib

# gdal.jar 存在于 /usr/share/java 中,将 gdal.jar 拷贝到容器外,之后的开发需要依赖这个 jar 包
docker cp 容器id或名称:/path/filename /path/filename

8、保存为镜像

1
docker commit -a "hqz" -m "Ubuntu gdal java8" feb24 ubuntugdal4java:1.0

9、编写测试程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//使用拷贝出来的gdal.jar包

public static void main(String[] args) {
// write your code here
//run->edit configuration->vm option: -Djava.library.path="/usr/lib/jni"
try{
System.out.println(System.getProperty("java.library.path"));
System.setProperty("java.library.path", System.getProperty("java.library.path")
+ ":/usr/lib/jni/");
System.out.println(System.getProperty("java.library.path"));
gdal.AllRegister();
Dataset hDataset = gdal.Open("/usr/share/java/JAVAGDAL.tiff") ;
int nband = hDataset.getRasterCount() ;
int xsize = hDataset.getRasterXSize() ;
int ysize = hDataset.getRasterYSize() ;
System.out.println(xsize + " " + ysize + " " + nband );
hDataset.delete();
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
}

10、运行结果

image-20211228085412512

在容器中运行测试代码打包的jar包,得到正常的输出。

11、总结

  1. ubuntu 拉取的是最小的镜像,所以会缺失很多插件工具,如:vim、zip、make 等需要补充

  2. 最后打包生成的镜像很大,有 4.5 G ,实际上应该用不了这么大,增加了很多没有用到的依赖

  3. 编写测试代码时,使用 maven 构建项目,将导出的 gdal.jar 导入到本地 maven 仓库,打包时没有将依赖打入测试代码的 jar 包,尝试了很多插件,最后时这个插件解决了问题,maven 依赖引用如下:

    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
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <configuration>
    <createDependencyReducedPom>true</createDependencyReducedPom>
    <filters>
    <filter>
    <artifact>*:*</artifact>
    <excludes>
    <exclude>META-INF/*.SF</exclude>
    <exclude>META-INF/*.sf</exclude>
    <exclude>META-INF/*.DSA</exclude>
    <exclude>META-INF/*.dsa</exclude>
    <exclude>META-INF/*.RSA</exclude>
    <exclude>META-INF/*.rsa</exclude>
    <exclude>META-INF/*.EC</exclude>
    <exclude>META-INF/*.ec</exclude>
    <exclude>META-INF/MSFTSIG.SF</exclude>
    <exclude>META-INF/MSFTSIG.RSA</exclude>
    </excludes>
    </filter>
    </filters>
    <artifactSet>
    <excludes>
    <exclude>org.apache.storm:storm-core</exclude>
    </excludes>
    </artifactSet>
    </configuration>
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>shade</goal>
    </goals>
    <configuration>
    <transformers>
    <transformer
    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
    <transformer
    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <!--主类全类名-->
    <mainClass>com.southsmart.gdal.TestDemo</mainClass>
    </transformer>
    </transformers>
    <shadedArtifactAttached>true</shadedArtifactAttached>
    <shadedClassifierName>launcher</shadedClassifierName>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
  • Copyrights © 2022-2023 hqz

请我喝杯咖啡吧~

支付宝
微信