u011856283
你好杰米
2018-06-14 05:16
采纳率: 95%
浏览 963
已采纳

sqoop1使用java操作,打包运行出现“找不到符号错误”

sqoop1在ide中测试完全没问题,打包后运行springboot项目,然后就会报错,报的是Text找不到符号,就是sqoop生成的那个java文件,为什么阿?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • yulongxy
    生命在于扯淡 2018-06-14 06:13
    已采纳

    问题描述太简单了,建议贴上代码和具体日志信息

    点赞 评论
  • dream_sunshines
    Joe0379 2018-06-14 06:46

    这个错都是在MAVEN插件在编译的时候报的,所以问题一定是出在编译的环节上。

    这个时候就要好好检查MAVEN的编译配置,

    1、看看配置里的编译版本和本机环境上配置的java版本是否一致,有时候报错的类有可能是引用了另外另外一个MAVEN模块的代码,也要看看那个模块的版本配置编码是否一致。但这并不是一定的,有时候不一致也不会有问题,但这是一个可以注意的点。

    例如下图情况:


    org.apache.maven.plugins
    maven-compiler-plugin
    3.3

    1.7
    1.7
    UTF-8


    2、如果报错的类里面有引用了另外一个MAVEN模块的代码,那么在打这个模块的包之前,最好先编译打包一下那个要引用的MAVEN模块。

    3、还有可能是编译插件版本的问题,例如刚刚上面的MAVEN插件配置,在出问题的时候可以尝试把版本调低或者调高,然后再编译试试。

    4、还要看看编译插件里面是否还有引用了其它的插件,例如下面情况所示:


    org.apache.maven.plugins
    maven-compiler-plugin



    org.mapstruct
    mapstruct-processor
    ${mapstruct.version}




    这里的编译插件还引用了mapstruct依赖,所以要检查一下这个引用的依赖版本是否有问题,可以尝试更换其它版本。

    最近我遇到的一个问题就是出在这里。我的工程里面有一个DTO类,然后在另外一个impl类里面会调用这个DTO类某个属性的set方法,就是在编译这个impl类的时候,报了找不到符号,报错的位置就是这个set方法的位置。后来试了好多方法都不行,最后发现原来这是mapstruct的一个bug,如果我这个DTO类的getter和setter方法的顺序与属性的顺序不一致的话,就会编译失败。例如类里面的属性先是name,下一行就是age,再下一行就是habbit,那么getter,setter方法也要按这个顺序,先是name的getter,setter方法,然后再是age的getter,setter方法,等等。我就是有个组getter,setter方法顺序不对,所以编译出错了。这真的是非常坑。

    所以用这些开源的插件,尽量用稳定版本,不然怎得非常坑。

    5、简单粗暴地使用“Maven Update Project”,这个方法能解决大部分情况下的这个问题。

    点赞 评论

相关推荐