[alibaba/p3c]建议建立机制将README.md中的版本和实际版本保持一致

2024-02-21 434 views
1

例如当前p3c-pmd模块的正式版本为:2.1.1,但p3c-pmd README.md中的maven和gradle依赖版本还是1.3.6,其依赖的pmd和最新的pmd版本(6.x.x)不兼容,使用pmd执行时会出现java.lang.ClassNotFoundException错误。

$ cd pmd-bin-6.15.0/lib
$ mvn dependency:get -Dartifact=com.alibaba.p3c:p3c-pmd:1.3.6 -Ddest=.
$ ../bin/run.sh pmd -d <source-code> -R rulesets/java/ali-comment.xml -f text
Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/pmd/lang/java/rule/comments/AbstractCommentRule
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at net.sourceforge.pmd.rules.RuleBuilder.build(RuleBuilder.java:180)
    at net.sourceforge.pmd.rules.RuleFactory.buildRule(RuleFactory.java:189)
    at net.sourceforge.pmd.RuleSetFactory.parseSingleRuleNode(RuleSetFactory.java:551)
    at net.sourceforge.pmd.RuleSetFactory.parseRuleNode(RuleSetFactory.java:450)
    at net.sourceforge.pmd.RuleSetFactory.parseRuleSetNode(RuleSetFactory.java:367)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSet(RuleSetFactory.java:214)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSet(RuleSetFactory.java:209)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSets(RuleSetFactory.java:170)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSets(RuleSetFactory.java:154)
    at net.sourceforge.pmd.RulesetsFactoryUtils.getRuleSets(RulesetsFactoryUtils.java:38)
    at net.sourceforge.pmd.RulesetsFactoryUtils.getRuleSetsWithBenchmark(RulesetsFactoryUtils.java:67)
    at net.sourceforge.pmd.PMD.doPMD(PMD.java:206)
    at net.sourceforge.pmd.PMD.run(PMD.java:485)
    at net.sourceforge.pmd.cli.PMDCommandLineInterface.run(PMDCommandLineInterface.java:165)
    at net.sourceforge.pmd.PMD.main(PMD.java:455)
Caused by: java.lang.ClassNotFoundException: net.sourceforge.pmd.lang.java.rule.comments.AbstractCommentRule
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 39 more

上面之所以使用pmd 6.15.0的版本,是因为通过源码(默认的master分支)看到p3c-pmd依赖的就是6.15.0,出现jar兼容问题造成了一定的困扰。

所以是不是可以建立一种机制,比如统一发包流程,保证文档中引用的版本和实际组件的版本一致。

回答

4

他们一年更新3次左右,有时间弄这个机制还不如再多更一次.

9

aha!在IDEA插件市场看到你维护的TPM版本了,原来如此。