美文网首页
gradle踩坑记录

gradle踩坑记录

作者: kevin0016 | 来源:发表于2019-06-20 17:10 被阅读0次

    描述问题

    • 项目:https://github.com/alibaba/p3c
    • 场景,公司进行代码规范化行动,使用阿里的一套规范化格式,需要对上面的项目打成可执行jar包,并且写入git 的hooks文件
      执行步骤
      初始化gradle
    gradle init
    

    编辑build.gradle,加入jar块(最后一块代码块)

    apply plugin: 'java'
    apply plugin: 'maven'
    
    group = 'com.alibaba.p3c'
    version = '1.3.6'
    
    description = """p3c-pmd"""
    
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    
    configurations.all {
    }
    
    repositories {
         maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
         maven { url "http://repo.maven.apache.org/maven2" }
    }
    dependencies {
        compile group: 'net.sourceforge.pmd', name: 'pmd-java', version:'5.5.2'
        compile group: 'net.sourceforge.pmd', name: 'pmd-vm', version:'5.5.2'
        testCompile group: 'net.sourceforge.pmd', name: 'pmd-test', version:'5.5.2'
    }
    jar {
        from {
            // 添加依懒到打包文件
            configurations.runtime.collect{zipTree(it)}
        }
    }
    

    开始构建Gradle项目

    ./gradlew build
    

    构建完成后在build/libs/中会生成p3c-pmd-1.3.6.jar包,到此就获取到了我们需要的Jar包了
    然后执行jar包的时候......

    java -cp p3c-pmd-1.3.6.jar net.sourceforge.pmd.PMD -d test.java -R rulesets/java/ali-comment.xml
    

    出现

    Exception in thread "main" java.lang.NullPointerException
            at net.sourceforge.pmd.cli.PMDParameters.getLanguage(PMDParameters.java:223)
            at net.sourceforge.pmd.cli.PMDParameters.transformParametersIntoConfiguration(PMDParameters.java:151)
            at net.sourceforge.pmd.PMD.run(PMD.java:490)
            at net.sourceforge.pmd.cli.PMDCommandLineInterface.run(PMDCommandLineInterface.java:167)
            at net.sourceforge.pmd.PMD.main(PMD.java:477)
    

    ????????????一脸的黑人问号
    为啥空指针异常了,去查看PMD源码,发现PMD获取不到资源文件中的语言值。而这个资源文件在META-INF中。
    打开生成的jar看一下情况,结果。。。。。


    image.png

    卧槽?这几个相同的文件咋回事???
    上面的构建方式没有去解决Jar包中META-INF文件下的文件合并问题。每个依赖的jar包在合并时都是复制进来,这就导致了原先的PMD包中有net.sourceforge.pmd.cpd.Language和net.sourceforge.pmd.lang.Language这两个文件,而p3c-pmd中也有这两个文件,冲突了。

    最后还是直接用maven的打包指令.......


    image.png

    一切正常。。。

    相关文章

      网友评论

          本文标题:gradle踩坑记录

          本文链接:https://www.haomeiwen.com/subject/zgpjqctx.html