您的位置:首页 > 其它

Naturalize环境配置和使用说明

2017-09-06 20:14 1351 查看
                                                         ~By Fnoily

 
项目概述

Naturalize由爱丁堡大学信息学院(Edinburgh University's School of Informatics)的一群研究者(Miltos Allamanis博士等人)研制一个项目。

其主要的功能为,针对用户的项目特定代码库进行分析,建立语言模型。并借此,对用户代码进行命名规范的建议。

Naturalize项目详情: http://groups.inf.ed.ac.uk/naturalize/

Naturalize源码: https://github.com/mast-group/naturalize

Naturalize论文:http://dl.acm.org/citation.cfm?id=2635883

 
环境配置

考虑到本文读者水平可能参差不齐,接下来,作者将详细描述这一配置过程。

     1、Clone项目

首先,将我们所需的代码,从Github上clone下来。

我们可以发现我们所需的代码,不止Naturalize项目的代码,还有,其4个依赖项目(见图1)。


图 1所需依赖项目

    
 

 

 
我们不妨先建立一个文件夹,来统一管理这些项目。假设将其命名为NewProject(见图2)。

    键入命令为:

    mkdir NewProject


图 2建立名为NewProject文件夹

 

 
    随后根据各项目版本库URL,进行Clone。

    Naturalize

    https://github.com/mast-group/naturalize.git

    Codemining-sequencelm:

    https://github.com/mast-group/codemining-sequencelm.git

    Codemining-utils:

    https://github.com/mast-group/codemining-utils.git

    Codemining-core:

    https://github.com/mast-group/codemining-core.git

    Commitmining-tools:

    https://github.com/mast-group/commitmining-tools.git

    

    键入命令为:

 
    git clone https://github.com/mast-group/naturalize.git

    git clone https://github.com/mast-group/codemining-sequencelm.git

    git clone https://github.com/mast-group/codemining-utils.git

    git clone https://github.com/mast-group/codemining-core.git

    git clone https://github.com/mast-group/commitmining-tools.git

图 3将所需代码clone下来

 
    2、依赖项目打包,并加入maven本地库

    该项目是是利用maven构建的,所以在compile前还需要一些准备工作。(maven是一种可通过一小段描述信息来管理项目构建,报告和文档的软件管理工具,具体内容请读者自行查阅,这里不再赘述)

    
 

 
    具体准备工作

 
    (1)针对codemining-utils的工作


 
    将工作目录切换到codemining-utils下,将其打包

    键入命令为:

    cd codemining-utils

    mvn package

    
 

 

 
图 4打包codemining-utils

打包成功后,在codemining-utils目录下会生成一个jar包文件

图 5生成的jar包文件

    接下来将这个jar包文件,移动这上层文件夹(也就是和pom.xml文件放在一起),然后将其添加至本地库中。

    键入命令:

    mv codemining-utils-1.1-SNAPSHOT.jar ../

    cd
..

    mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=codemining-utils-1.1-SNAPSHOT.jar

    【注】此处命令内容较多,建议读者复制,以防出错

    
图 6将jar包移至上层

 
图 7加入本地库

 
    (2)针对codemining-core的工作

    在我们直接对codemining-core进行打包命令时,会发现会报告很多内容找不到的错误。


图 8错误报告

    这是由于目前的更改环境之后(相对于开发者),目前的描述项目信息的pom文件就不能支持项目现在正常运行,即可以理解为缺少了一些描述依赖关系的内容。(如何知道添加哪些依赖呢?请读者见文末的附录)所以,请读者用连接中的内容,替换pom文件中内容:

https://github.com/Fnoily/study-of-naturalize/blob/master/codemining-core/pom.xml

 
    而后,再次进行打包。


图 9再次打包

    之后,将target目录下jar包移至上层,并加入本地库中。

    键入命令:

    mv codemining-core-1.1-SNAPSHOT.jar ../

    cd
..

    mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=codemining-core-1.1-SNAPSHOT.jar

    此处工作与(1)中相类似,不再配图说明。

    
 

 

 
    (3)针对codemining-sequencelm的工作

    类似的,先将pom.xml中内容,替换成以下连接中内容:

https://github.com/Fnoily/study-of-naturalize/blob/master/codemining-all/codemining-sequencelm/pom.xml

 
    而后进行打包,发现依旧报错。


图 10codemining-sequence依旧报错

    读者在这里不禁要发问,这是因为什么呢?仔细观察pom.xml文件后发现。其还需要一个名为codemining-all的parent关系。

    


图 11仔细观察pom.xml

    因此,立即可推,此时需要在codemining-sequence外面再套一个名为codemining-all的文件夹。


图 12建一个名为codemining-all的文件夹

    之后,在此目录下再新建一个pom.xml来描述依赖关系。使用以下连接中内容进行填写。

https://github.com/Fnoily/study-of-naturalize/blob/master/codemining-all/pom.xml

 

图 13新建一个pom文件

    之后再进入codemining-sequence中进行打包,和将jar添加到本地库中的工作。

    部分键入命令为:

    cd codemining-sequencelm/

mvn package

cd target/

mv codemining-sequencelm-1.1-SNAPSHOT.jar ../

cd
..

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=codemining-sequencelm-1.1-SNAPSHOT.jar

    
 

(3)针对commitming-tools的工作

    类似的,将pom.xml中内容按照以下连接中内容进行修改。

https://github.com/Fnoily/study-of-naturalize/blob/master/commitmining-tools/pom.xml

    之后进行打包并添加入本地库中的工作。

    键入命令为:

mvn package

cd target/

mv commitmining-tools-1.1-SNAPSHOT.jar ../

cd
..

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=commitmining-tools-1.1-SNAPSHOT.jar

    
 

 

 

 
(4)针对naturalize的工作

类似的,将pom.xml中内容按照以下连接中内容进行修改。

https://github.com/Fnoily/study-of-naturalize/blob/master/naturalize/pom.xml

之后进行打包并添加入本地库中的工作。

键入命令为:

mvn package

cd target/

mv naturalize-1.1-SNAPSHOT.jar ../

cd
..

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=naturalize-1.1-SNAPSHOT.jar

    
 

 

 

 

 

 

 
    3、编译运行

    做完以上工作后,就可以成功的编译Naturalize项目了。

    键入命令为:

    mvn compile


图 14Naturalizer成功编译

 

 

 

 

 

 

 
    4、导入eclipse

    因为项目是由maven构建的,一般maven项目的信息保存在pom.xml中。而eclipse项目,也有自己的默认java目录结构,保存于.classpath,.project和.settings中。所以,想要用eclipse来阅读源码,是不可以直接打开的。

    但是,maven中有帮我们解决这一问题的方法。

    可以使用以下命令,以转化eclipse项目。

    mvn eclipse:eclipse

    


图 15mvn eclipse:eclipse

    之后,我们可以发现,在目录下生成了一些我们想要的东西。

    


图 16一些变化

    然后,就可以在eclipse中将其成功导入。


图 17导入eclipse

 

 
    为读者便捷,笔者在Github上push了一份配置好的项目,可直接在Github上搜索名称为study-of-naturalize后直接clone即可。

 
三、工具运行

    Miltos博士等人,在Natualize的基础上,开发了几款工具(论文中都有提到,请读者按照第一部分中连接进行阅读)。这些工具的主要的功能,也是对用户的代码进行变量名称更改的建议。

    所提供的工具,读者都可以在http://groups.inf.ed.ac.uk/naturalize上找到并下载。

    1、buildlm

    buildlm是根据用户代码库进行分析生成语言模型的,其产品为语言模型文件(.ser文件),其他的工具(如devstyle)在某些情况下会使用到这一模型。

    其命令格式为

    java -jar buildlm.jar -n 5 -t /dir/of/codebase/to/train -o myLm.ser

    
 

 
其中"-n"后参数为n-gram取值(详情请读者自行查看论文),"-t"为用户代码库地址,"-t"后为生成语言模型文件的名称。


图 18生成例子

    2、devstyle

    Devstyle是一个eclipse的插件,于是,首先有这样一个问题,如何通过jar包来安装插件。

    相信读者不难从网络上找到方法,在这里,笔者只提供一种相对简单的方法。

    将devstyle.jar放置在eclipse安装目录下Eclipse\dropins\下即可。


图 19一种简单方法

    【注】有时eclipse版本会影响到安装成功与否,笔者在实验时就遇到在eclipse neon版本不成功,但在eclipse oxygen版本便可成功。

    成功后,右键菜单中会有devstyle选项。


图 20 devstyle插件成功安装

    之后,用户可选中待分析部分代码,右键选择"naturalize"进行分析。


图 21分析结果

    用户可选择一个认为合适的待选选项,点击"OK",之后,所有的待修改变量将被更改。如图21,若选择"temperature"后,所有的"t"将会被工具识别并修改为"temperature"。

    3、styleprofile

    Stylrprofile将会为用户返回分析代码后的变量名称修改建议的一个列表清单。在笔者看来,可以认为devstyle是图形化的styleprofile。

    其使用命令为:


图 22使用命令

    "-c"后参数为用户代码库地址和待分析文件




【注】图22中styleprofile在实际使用时应替换成为java -jar styleprofile.jar


图 24 实际使用part2

附录

1、如何添加pom.xml中缺少的依赖关系?

 
一般来说,pom文件中总体的框架是完备的,但是由于使用者和开发者机器环境不同,则会导致在编译时发生一些错误。这是因为,有一些包,在开发者的机器上是有的,所以就不用在特别声明依赖关系。而我们作为使用者是没有这些内容的,所以就需要写明这些依赖关系,在打包或编译的过程中,会自动下载这些内容。

    大体上,依赖关系都是写在xml文件中

    <dependencies>
    ...

    </dependencies>

    这样的结构中的,其依赖项书写格式为:

    <dependency>
        <groupId>…</groupId>
        <artifactId>…</artifactId>
        <version>…</version>
    </dependency>

    
 

 

 

 

 
    接下来,就是要知道我们缺少哪些依赖项。

    实际上,查看编译信息是一个很重要的能力。我们,可以先进行打包或编译尝试,通过报错信息,查看缺少什么。


图 25报错信息例子

 

 

 

 
    如图25 ,我们就可以清楚的知道我们缺少org.apache.commons.io.filefilter这个程序包,之后我们便可以借助于搜索引擎,的查看这个包是什么,就可易得以下内容:

    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.0.1</version>
    </dependency>

    

 
2、读者如有问题,可通过以下方式与笔者联系

alpc_fnoily@163.com(请注明"Naturalize编译问题")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: