下载 DataX

首先,访问 DataX 官网地址 https://github.com/alibaba/DataX/ 进行下载

编译 DataX

下载后解压 DataX,在确保已经安装了maven之后,进入DataX目录,执行 mvn -U clean package assembly:assembly -Dmaven.test.skip=true 命令进行编译。

使用-U参数: 该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新,而持续集成的频率应该比这高很多。clean: clean能够保证上一次构建的输出不会影响到本次构建。maven中有多种插件提供了打包功能,分别是maven-jar-plugin(用来打包成jar包),maven-war-plugin(打包成war包)、maven-assembly-plugin。最常用的打包命令有mvn clean package、mvn clean install、mvn clean deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库maven中有多种插件提供了打包功能,分别是maven-jar-plugin(用来打包成jar包),maven-war-plugin(打包成war包)、maven-assembly-plugin-D 表示 Properties属性,而 -P 表示 Profiles配置文件在使用mvn package进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是:-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类java14以上的编译问题

如果 java 版本是14以下,那么不会有问题。如果 java 版本跟我一样是 15,则会报如下错误

由于在 Java15,Oracle新增了一个 java.lang.Record 类,因此如果这么导入 import com.alibaba.datax.common.element.*; 编译器无法判断,到底是引用 com.alibaba.datax.common.element.Record,还是引用 java.lang.Record,因此报错。

使用find . -name *.java | xargs grep -F 'com.alibaba.datax.common.element.*' 来查找有哪些引发混淆的文件。

find 命令用来指定文件类型,点号表示当前路径xargs是一个给其他命令传递参数的过滤器grep -F 表示查找文件中是否包含某个字符串,-F表示纯粹的字符串(默认使用正则表达式匹配)grep -l 可以只显示文件路径,不显示匹配到的内容

有两种方法进行替换

使用vim逐个替换。例如vim /home/chen/Documents/DataX-master/core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java,然后使用命令 :%s#Record #com.alibaba.datax.common.element.Record #g进行批量替换,为所有 Record 明确其引用的包名。替换完后,再输入 :wq 对修改进行保存并退出。这个方法少量文件还好,要是文件多的话,就十分麻烦了。使用sed命令批量处理,将 Record 替换为 com.alibaba.datax.common.element.Recordsed -i 's/Record /com.alibaba.datax.common.element.Record /g' `find . -name *.java | xargs grep -F 'com.alibaba.datax.common.element.*'`1手动处理下下面文件

/home/chen/Documents/DataX-master/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java/home/chen/Documents/DataX-master/streamreader/src/main/java/com/alibaba/datax/plugin/reader/streamreader/StreamReader.java/home/chen/Documents/DataX-master/mongodbwriter/src/main/java/com/alibaba/datax/plugin/writer/mongodbwriter/MongoDBWriter.java/home/chen/Documents/DataX-master/hbase11xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase11xsqlreader/HbaseSQLReaderTask.java/home/chen/Documents/DataX-master/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20xSQLReaderTask.java

在vim中:行号可以直接跳转到指定行

某个库找不到的解决办法

如果遇到某个包下载不到,使用浏览器进入 https://public.nexus.pentaho.org/service/rest/repository/browse/omni/ 页面手动下载到 m2 的对应目录即可

 

找不到 oscarJDBC.jar

[ERROR] Failed to execute goal on project oscarwriter: Could not resolve dependencies for project com.alibaba.datax:oscarwriter:jar:0.0.1-SNAPSHOT: Could not find artifact com.oscar:oscar:jar:7.0.8 at specified path /home/chen/Documents/DataX-master/oscarwriter/src/main/lib/oscarJDBC.jar -> [Help 1]这个是阿里工程师的失误,网上也找不到这个包,因此进入pom.xml,注释该选项即可

编译成功

编译好的文件都放在 target 目录下

————————————————版权声明:本文为CSDN博主「福州司马懿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/chy555chy/article/details/118675428

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。