逐行迭代文本文件的内容有最佳做法吗?(与PMD和s赋值)
我们有一个Java应用程序,该应用程序具有一些知道可以读取文本文件的模块.他们很简单地使用这样的代码来做到这一点: BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while ((line = br.readLine()) != null) { ... // do stuff to file here } 我在我的项目上运行 pmd ,并在while (...)线上违反了' sistionmentInoperand . 除了显而易见的循环外,是否有一种更简单的方法: String line = br.readLine(); while (line != null) { ... // do stuff to file here line = br.readLine(); } 这是否认为是更
0 2023-12-03
编程技术问答社区
用于PMD的Eclipse重复注释@SurpressWarnings
我试图禁用班级的几个任意PMD警告. 如何列出几个PMD规则要忽略?我找不到Google. @SuppressWarnings("PMD.OnlyOneReturn") @SuppressWarnings("PMD.ShortVariable") public class MyClass { 它给出Eclipse编译时间错误: Duplicate annotation @SurpressWarnings 这是可以编译但被忽略的 @SuppressWarnings("PMD.OnlyOneReturn, PMD.ShortVariable") 这个 @SuppressWarnings("PMD.OnlyOneReturn", "PMD.ShortVariable") 结果是 Syntax error on token , Eclipse配置为接受PMD类型: unsupported @supported @SuppressWar
0 2023-11-27
编程技术问答社区
添加一个空字符串与toString-为什么不好?
根据工具PMD,以下是一个不好的做法: String s = "" + 123; // bad String t = Integer.toString(456); // ok This is an inefficient way to convert any type to a `String`. 为什么要做一件坏事? 解决方案 String s = "" + 123; // bad String t = Integer.toString(456); 将被编译为: String s = "123"; String t = Integer.toString(456); so:"" +123很明显好! > public static void main(String args[]) { // 0 0:ldc1 #16 // 1 2:astore_1 //
4 2023-10-24
编程技术问答社区
在StringBuffer附录中对单字符值使用字符而不是字符串
我正在通过PMD规则AppendCharacterWithChar.它说避免将字符作为字符串. 中的字符串 StringBuffer sb = new StringBuffer(); // Avoid this sb.append("a"); // use instead something like this StringBuffer sb = new StringBuffer(); sb.append('a'); 我真的需要这个PMD规则吗?以下两个代码之间有很大的性能差异吗? String text = new StringBuffer().append("some string").append('c').toString(); String text = new StringBuffer().append("some string").append("c").toString(); 解决方案 将字符附加为char始终要比附加为Stri
34 2023-10-03
编程技术问答社区
如何使用Gradle-PMD-Plugin将自定义Java PMD规则添加到Gradle项目中?
在项目 arch4u-pmd 它们在基于XML的规则集our-rules.xml中,并将其作为普通的Java Lib/trifact(io.github.abc:my-pmd-rules:0.1.0)出版给我们的文物存储库. 伪影结构看起来像这样: > unzip -l my-pmd-rules-0.1.0.jar Archive: my-pmd-rules-0.1.0.jar Length Date Time Name --------- ---------- ----- ---- 0 02-15-2022 00:24 META-INF/ 139 02-15-2022 00:24 META-INF/MANIFEST.MF 0 02-15-2022 00:24 io/ 0 02-15-2022 00:24 io/github/ 0 02
8 2023-09-29
编程技术问答社区
确保具有特定注释的字段是'私有的'。
我们的代码中非常常见的错误是编写 @Mock Object object; @InjectMocks Subject subject; 而不是 @Mock private Object object; @InjectMocks private Subject subject; 这会防止PMD/Findbugs/Intellij发出警告,当该字段尚未使用时,我们的代码评论也会被"使此字段私有"评论肿. 当带有特定注释的字段没有预期可见性时,任何工具中是否有任何静态分析规则? 我找到了CheckStyle的可识别性modifitymodifielymodifieldifier ,但它标志着所有非private Fields具有特定注释的人. 解决方案 您可以在Intellij Idea中使用结构搜索检查.例如,具有这样的模式: @Mock @Modifier("packageLocal") $FieldType$ $FieldName$ = $I
26 2023-09-29
编程技术问答社区
自定义PMD规则检查包注释就位
我正在尝试编写一条规则来强制包含带有特定表达式的Javadoc评论,例如: /** * Example Expression */ 有人知道我将如何使用 AbstractJavarule 类编写这样的规则.我已经看了Astpackagedeclaration,但这似乎没有我想要的. 非常感谢... 解决方案 PMD使用JavACC将每个Java文件解析为抽象语法树.通常,用于编译的解析器只需删除评论,从我可以在但要看PMD论坛,看起来确实像保留为特殊的_token ,但是很难将它们与与之关联的AST节点保持一致.因此,您可能很难编写此规则.您是否查看了
12 2023-09-29
编程技术问答社区
SonarQube是Checkstyle、PMD、FindBugs的替代品吗?
我们正在从头开始从事Web项目,并正在研究以下静态代码分析工具. 会议(CheckStyle) 不良实践(PMD) 潜在错误(findbugs) 该项目建立在Maven上.我没有为此目的使用多个工具,而是在寻找一个灵活的解决方案,并遇到了Sonarqube. 确实可以通过Sonarqube实现CheckStyle,PMD和Findbugs的结果吗? 解决方案 Sonar将运行CheckStyle,Findbugs和PMD,以及Java Projects默认情况下的其他一些"插件",例如Cobertura(Code Coverage).但是,主要的增加值是它将历史记录存储在数据库中.然后,您可以看到趋势.您是改进代码库还是做相反的事情?只有带有内存的工具才能告诉您. 您应该在CI系统中运行声纳,以便甚至需要一些时间来执行的事情(例如CPD - 复制糊剂检测器)也可以运行.而且您将拥有您的历史.例如,使用Eclipse插件,您会尽快检测到违规行为 - 很棒
34 2023-09-29
编程技术问答社区
PMD和FindBugs之间有什么区别?
有一个比较PMD和CheckStyle的问题.但是,我找不到PMD和Findbugs之间的差异/相似性的细分.我相信关键区别在于,PMD在源代码上工作,而FindBugs在编译字节码文件上工作.但是就能力而言,它应该是一个/或选择还是相互补充? 解决方案 我都在使用.我认为他们互相补充. 正如您所说, pmd 在源代码上工作,因此发现了诸如:违反命名的问题,缺乏命名的问题,卷曲括号,放错了空检查,长参数列表,不必要的构造函数,switch中缺失的断路等.PMD还告诉您 findbugs 在bytecode上工作.以下是一些问题,发现bugs发现哪些PMD没有:equals()方法在子类型上失败,克隆方法可以返回null,布尔值的参考比较,不可能的铸造,32bit int th 32bit int the Mush the Mush in nock of 0-31,包含自己的集合,等于方法总是返回true,一个无限的循环等. 通常,他们每个人都会发现一组不同的问题.两者
8 2023-09-29
编程技术问答社区
Checkstyle vs. PMD
我们将静态分析工具引入了我们Java产品的构建系统.我们正在使用maven2 so checkstyle 和利用这两种情况有好处吗?如果可以的话,我不想维护2个工具.如果我们选择一个,我们应该使用哪一个,为什么? 我们还计划使用Findbugs.我们还应该研究其他静态分析工具吗? 更新:共识似乎是PMD比CheckStyle首选.我看不到两者都使用的充分理由,也不想维护2组规则文件,因此我们可能会专门针对PMD.我们还将引入Findbugs,也许最终是Macker来执行建筑规则. 解决方案 您绝对应该使用 findbugs .以我的经验,假阳性速率非常低,即使是关键的警告也值得在某种程度上解决. 至于CheckStyle vs. PMD,我不会使用CheckStyle,因为它几乎只关心样式.根据我的经验,CheckStyle将报告很多完全无关紧要的事情.另一方面,PMD还能够指出可疑的编码实践,其输出通常更相关和有用. 其他解决方案 两种软件都是有用的.
72 2023-09-29
编程技术问答社区
使用Spring @Controller定型保持方法可见性的最佳实践
我在当前工作时的项目私有 MVC控制器方法的访问修饰符: @Controller public class HelloWorldController { @RequestMapping("/helloWorld") private ModelAndView helloWorld() { 我已经整合了PMD,他的报告有很多: /src/main/java/com/web/controller/SignalController.java:91: Avoid unused private methods such as 'handleNewRequest()'. 因此,我认为不用禁用有用的PMD规则,将控制器的方法可见性更改为 public . 是否有任何理由保留控制器的方法私有? 解决方案 您是通过私下来射击自己的脚: 它被PMD和IDE的未使用(
8 2023-09-14
编程技术问答社区
当基类中存在someObject时,使用PMD来检查someObject.methodCall。
我们有使用Spring Framework的 我需要检查的一些代码是这样写的: ---- 1级---- public abstract class BaseDao { @Autowired NamedParameterJdbcTemplate namedParamJdbcTemplate; ... } ---- 2类---- public class ThingDao extends BaseDao { public int updateTheThing(final Integer thingId, final Integer someVal) { final Map sqlParameters = new HashMap(); sqlParameters.put(":thingIdVar", thingId); sqlParameters.put(":othe
10 2023-09-11
编程技术问答社区
如何抑制PMD中的违规行为?
当我运行PMD分析时,我会收到违法行为: 每个类应至少声明一个构造函数 这种违规在弹簧控制器上.该控制器是由Spring实例化的,因此我不需要调用此类. 推荐忽略这种违规的方法? 根据 doc 可以使用//NOPMD忽略特定的违规. 解决方案 PMD还支持@suppresswarnings注释: // This will suppress all the PMD warnings in this class @SuppressWarnings("PMD") public class Bar { void bar() { int foo; } } 或仅一种警告: // This will suppress UnusedLocalVariable warnings in this class @SuppressWarnings("PMD.UnusedLocalVariable") public class Bar { void bar
8 2023-09-10
编程技术问答社区
原因:没有" REF"属性的PMD规则无法导入.看到'null'?
我正在尝试在Sonar 3.0.1中创建质量配置文件,并指定我的PMD配置文件. 但是当我提交时,我有以下错误: A PMD rule without 'ref' attribute can't be imported. see 'null' 在这里,我的扩展文件的内容(在声纳站点拍摄的示例): Avoid if without using brace rulesets/extensions.xml/AvoidIfWithoutBrace éviter les if sans crochet. 尽管我搜索,但我没有找到此错误的原因.
28 2023-09-07
编程技术问答社区
与声纳的PMD违规
我只需要与Sonar有关PMD的澄清.我们可以重新使用PMD报告,而PMD报告已经由Ant .. Else Sonar制作. 请帮助我...过去两天,IAM坚持了下来. 谢谢!!! 解决方案 不,不可能导入PMD或CheckStyle报告.这不是声纳的哲学. 没有任何保证在声纳中声明的配置(质量配置文件)执行的PMD.这将导致不一致的结果.此外,为什么Sonar为您执行PMD?
14 2023-09-06
编程技术问答社区
将Sonarqube升级到4.5.4后,PMD插件失败了
我是升级我现有的 Sonarqube 3.7.4安装到新的 lts版本4.5.4 . 我想重复使用我的规则集,我正在使用Sonarqube Ant任务(如前所述)来分析我的项目. 在执行ANT任务时,将声纳安装和ANT任务升级为2.2,而没有更改其他任何内容. build.xml:1659: org.sonar.runner.impl.RunnerException: Unable to execute Sonar at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) at java.security.AccessController.doPrivileged(Native Method)
6 2023-09-06
编程技术问答社区
不能在Eclipse中导入PMD规则集
我想在我的声纳配置文件的IDE(Eclipse)中使用相同的规则集. 我从Sonar Permalinks获得了PMD XML规则集,并想将其导入我的PMD Eclipse插件,但是当我尝试这样做时,"确定"按钮被启用了... 有人可以帮我吗? 解决方案 问题可能是Sonar正在导出V4.x格式的规则集,并且您的Eclipse插件期望它们以v5.x格式. 尝试从以下方式更改规则: 3 to 3 请注意 ref 属性.一个简单的发现并更换所有的一切都会适合您. 其他解决方案 伊
4 2023-09-06
编程技术问答社区
RegExp 匹配的字符串不是以我的
对于PMD,我想有一个规则,它警告我那些以my开始的丑陋变量. 这意味着我必须接受所有做不是以my开始的变量. 所以,我需要一个以下行为的正则是: re.match('myVar') == false re.match('manager') == true re.match('thisIsMyVar') == true re.match('myOtherVar') == false re.match('stuff') == true 我尝试了不同的,但尚未工作. 解决方案 您可以像其他人建议的那样使用lookahead断言.或者,如果您只想使用基本的正则表达语法: ^(.?$|[^m].+|m[^y].*) 这与零或一个字符长(^.?$)的字符串匹配,因此不能为my.或带有两个或多个字符的字符串,而当第一个字符不是m时,可能会遵循更多字符(^[^m].+);或者,如果第一个字符是m,则不得跟随A y(^m[^y]).
10 2023-08-15
编程技术问答社区
如何修复pmd违规 "NullAssignment"?
PMD报告NullAssignment以下代码,修复它的最佳做法是什么? 将对象分配给零是代码气味.考虑重构. 以下代码不是由我编写的,我也有一个问题,即为什么创建一个临时计时器实例,然后将此实例分配给计时器? startTimer和stopTimer将用于多线程上下文. private Timer timer; private void startTimer() { if (timer == null) { Timer aTimer = timerService.createTimer(DEFAULT_TIMER_VALUE, null); aTimer.setListener(this); timer = aTimer; } } private void stopTimer() { if (timer != null) { Timer aTimer = timer;
12 2023-08-03
编程技术问答社区