PKAQ

PKAQ 查看完整档案

济南编辑暨南大学  |  计算机 编辑东华软件股份公司  |  项目经理 编辑 pkaq.org 编辑
编辑

非著名野生程序猿

个人动态

PKAQ 回答了问题 · 2018-06-15

引入antd报错

把body.js的错误改掉 清除依赖重新yarn install

关注 3 回答 2

PKAQ 回答了问题 · 2018-06-15

Antd pro table 页面

  • 筛选条件把 state中的筛选值清空
  • 复选框选择 把table属性的selections state清空

关注 3 回答 2

PKAQ 回答了问题 · 2018-06-15

antd 代码分割与延迟加载

umi了解一下?

关注 5 回答 4

PKAQ 发布了文章 · 2017-10-19

# 在Gradle中使用阿里巴巴Java开发规约插件进行代码检查

在Gradle中使用阿里巴巴Java开发规约插件进行代码检查

概述

  最近阿里发布了《阿里巴巴Java开发手册》,一时间无数阿里拥趸如获武穆遗书,就在近日阿里又顺便发布了<阿里巴巴java开发规约插件>,可以轻松的在码字阶段获得相应的编码提示,那么,在Gradle中如何应用阿里开发规约进行代码检查呢.且看下文.

  阿里的开发规约插件是基于PMD进行的代码检测,所以在Gradle应用阿里开发规约检查只需要使用gradle提供的pmd插件即可达成目的.
目前阿里开发规约提供了如下一些规则配置,要应用这些配置只需要将他们配置到pmd的检查规则中即可.

  • ali-comment.xml
  • ali-concurrent.xml
  • ali-constant.xml
  • ali-exception.xml
  • ali-flowcontrol.xml
  • ali-naming.xml
  • ali-oop.xml
  • ali-orm.xml
  • ali-other.xml
  • ali-set.xml

PMD介绍

  PMD(Project Manager Design)是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题。此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。
  PMD的核心是JavaCC解析器生成器。PMD结合运用JavaCC和EBNF(扩展巴科斯-诺尔范式,Extended Backus-Naur Formal)语法,再加上JJTree,把Java源代码解析成抽象语法树(AST,Abstract Syntax Tree)。

以上内容引自百度百科-PMD条目

使用

apply plugin: 'java'
apply plugin: 'pmd'

ext {
    p3c = "1.3.0"
}

pmd {
    consoleOutput = true
    reportsDir = file("build/reports/pmd")

    ruleSets = [
        "java-ali-comment"
    ]
}

repositories {
   jcenter()
}

dependencies {
    pmd "com.alibaba.p3c:p3c-pmd:${p3c}"
}

这里有几个需要注意的点

  • gradle的pmd插件为rule都添加了默认的java-前缀,一定不要丢掉
  • dependencies中依赖的范围是pmd,这样依赖才会加到pmdClasspath中为pmd所用
  • 关于本插件的一些其它配置可以查看 pmd插件dsl手册

运行检查

该插件提供了如下几个任务

任务名称描述
pmdMain检查src/main/java下的代码
pmdTest检查src/main/test下的代码
pmdSourceSet检查给定范围的代码
check检查源码和单元测试代码

可以按照需求运行对应任务进行代码检查。

//使用短写方式运行pmdMain任务
gradle pM

输出的检测报告在我们定义的目录里可以找到build/reports/pmd

查看原文

赞 0 收藏 0 评论 0

PKAQ 回答了问题 · 2017-08-14

springboot的javaweb应用,如何与其他javaweb应用交互数据?

webservice一般还是异构场景用 比如你跟.net做交互;同构直接RPC吧或者做rest服务

关注 6 回答 7

PKAQ 回答了问题 · 2017-08-07

如何估计如下句子出现的概率?

下面这篇 - 许巍写歌最喜欢用什么词? 或许对你有用

http://whatbeg.com/2016/04/26...

关注 3 回答 2

PKAQ 回答了问题 · 2017-08-05

新建项目IDEA中build.gradle内容叠加

File->invalidate Caches 试一下

关注 3 回答 1

PKAQ 回答了问题 · 2017-08-05

gradle在打包时怎么排除另一个项目中所有引用的jar包

http://www.jianshu.com/p/6466...

请参考这篇文章

上一篇:依赖的分类

什么是传递依赖

  在Maven仓库中,构件通过POM(一种XML文件)来描述相关信息以及传递性依赖。Gradle 可以通过分析该文件获取获取所以依赖以及依赖的依赖和依赖的依赖的依赖,为了更加直观的表述,可以通过下面的输出结果了解。

+--- org.springframework:spring-web:4.3.4.RELEASE
|    |    +--- org.springframework:spring-aop:4.3.4.RELEASE
|    |    +--- org.springframework:spring-beans:4.3.4.RELEASE
|    |    +--- org.springframework:spring-context:4.3.4.RELEASE
|    |    \--- org.springframework:spring-core:4.3.4.RELEASE

  可以看到,我们的项目依赖了spring-web,然而spirng-web却依赖了一众spring的全家桶,借助Gradle的传递性依赖特性,你无需再你的脚本中把这些依赖都声明一遍,你只需要简单的一行,Gradle便会帮你将传递性依赖一起下载下来。

compile `org.springframework:spring-web:4.3.4.RELEASE`

 传递依赖特性可以轻松地通过transitive参数进行开启或关闭,上面的示例中如果要忽略spring-web的传递性依赖可以采用指定 transitive = false 的方式来关闭依赖传递特性,也可以采用添加@jar的方式忽略该依赖的所有传递性依赖。

compile("org.springframework:spring-web:4.3.4.RELEASE") {
    transitive = false
}
compile `org.springframework:spring-web:4.3.4.RELEASE@jar`

下面的语句,可以全局性的关闭依赖传递特性。

configurations.all {
   transitive = false
}

排除依赖

   有些时候你可能需要排除一些传递性依赖中的某个模块,此时便不能靠单纯的关闭依赖传递特性来解决了。这时exclude就该登场了,如果说@jar彻底的解决了传递问题,那么exclude则是部分解决了传递问题。然而实际上exclude肯能还会用的频率更更频繁一些,比如下面几种情况。

  • 依赖冲突时,如果有两个依赖引用了相同jar包的不同版本时,默认情况下gradle会采用最新版本的jar包,此时可以通过排除选项来排除。

  • 运行期无需此模块的。

  • 无法正常获取到此传递依赖,远程仓库都不存在的。

  • 版权原因需要排除的。

  • 其他原因。

可以通过configuration配置或者在依赖声明时添加exclude的方式来排除指定的引用。

  exclude可以接收group和module两个参数,这两个参数可以单独使用也可以搭配使用,其中module可以理解为对应GAV中的artifactId,也就是compile group: 'org.gradle.test.classifiers', name: 'service', version: '1.0'中的中间name部分。

configurations {
    //编译期排除commons模块
    compile.exclude module: 'commons'
    //在整个构建过程中排除pkaq.tiger:share
    all*.exclude group: 'pkaq.tiger', module: 'share'
}

dependencies {
    compile("pkaq.tiger:web:1.0") {
        exclude module: 'share'
    }       
}

使用强制版本

  当然,有时候你可能仅仅是需要强制使用某个统一的依赖版本,而不是排除他们,那么此时force就该登场了。指定force = true属性可以冲突时优先使用该版本进行解决。

compile('org.hibernate:hibernate:3.1') {
     force = true
}

全局配置强制使用某个版本的依赖来解决依赖冲突中出现的依赖

configurations.all {
   resolutionStrategy {
       force 'org.hamcrest:hamcrest-core:1.3'
   }
}

使用动态版本

  如果你想让你的工程始终采用最新依赖,那么Gradle提供了一种方式可以始终保证采用依赖的最新版本而无需每次手工检查修改版本。
  使用加号+,可以让Gradle在每次执行构建时检查远程仓库是否存在该依赖的新版本,如果存在新版本则下载选用最新版本。当然也可以指定依赖某个大版本下的最新子版本,1.+表示始终采用该依赖最新的1.x版本的最新依赖。

compile 'org.springframework:spring-web:+'

虽然这是看上去十分风骚的一种用法,但这无疑会降低你系统构建的速度同时提高构建失败的风险。因为Gradle不得不每次检查远程仓库是否存在最新版本,同时新版本也可能带来无法预知的兼容性问题,比如quartz2.x较之于quartz1.x,common-lang3较之于common-lang等。

一个综合示例

compile('org.hibernate:hibernate:3.1') {
 // 冲突时优先使用该版本
 force = true

 // 依据构建名称排除
 exclude module: 'cglib' 
 // 依据组织名称排除
 exclude group: 'org.jmock' 
 // 依据组织名称+构件名称排除
 exclude group: 'org.unwanted', module: 'iAmBuggy' 

 // 为本依赖关闭依赖传递特性
 transitive = false
}

下一篇:依赖的刷新与缓存

关注 5 回答 1

PKAQ 回答了问题 · 2017-08-05

gradle build问题

黄色的是单元测试 观察下任务名
up-to-date的是被跳过的

关注 2 回答 1

PKAQ 回答了问题 · 2017-08-05

gradle如何调用shell脚本(Windows)?

windows请调用.bat

关注 3 回答 2

认证与成就

  • 获得 14 次点赞
  • 获得 9 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 7 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2015-09-23
个人主页被 521 人浏览