安装配置,Ant命令总括

C/CPP代码审计<splint/flawfinder>

原创: 情书吖

美高梅开户网址 1

        
后天偶然接触到了贰个代码审计产品,集团创制人是前阿里Baba(Alibaba)平安老板。结局的感想就是:代码审计工具这几个行业,果然不是那么自由立足的。

        即便网上五花八门的代码审计工具排行,fortify的主流地位也是未曾人疑惑的。可是在实际上利用过程中,面对C/CPP时,商业级的fortify处理结果却并不是很理性。

        废话不多说,进入明日的核心,前些天为我们介绍四款C/CPP代码审计工具的设置和平运动用,安装格局和平台尽管很多,<小编不是懒吗/逃>,在此间为我们介绍最简便易行实用的安装方式和平台选择,希望得以为C/CPP编制程序狗</???>大佬们提供安全支出方面包车型客车拉拉扯扯。

<splint>

        splint是二个GNU免费授权的
Lint程序,是叁个动态检查C语言程序安全缺陷和编写制定错误的程序。Splint会开始展览八种正规检查,包含未使用的变量,类型不等同,使用未定义变量,不恐怕推行的代码,忽略重临值,执行路径未归来,Infiniti循环等悖谬。

        链接: 密码:xjyb

        安装:前期可依据须要提供任何平台安装方式,在此只介绍
windows平台下的安装并附上永久下载链接。

        1.率先解压。假如解压到C:/splint-三.一.一则不用调整环境变量。可执行文件在bin下。  

        借使放置任何途径下,须要修改环境变量。在用户变量中添加  

        LARCH_PATH – <你安装splint的路径>/lib   

        LCLIMPORTDIR – <你安装splint的路径>/imports   

        include – 系统include文件所在的目录。

     
 (其实include那一个参数是从谷歌(谷歌)1个论坛下找的,说的很模糊,实验的结果正是include参数指向了VC++陆.0下的include,,不清楚这么做是智慧还是蠢,欢迎指正
 /逃)

        二.在用户变量Path中加上splint.exe所在的路子,方便以往调用。  

        叁.使上述的修改生效:注销当前用户然后再一次登录。

美高梅开户网址 2

 

美高梅开户网址 3

        附上成果和-help新闻,客户体验说下,该工具更倾向于检查测试语法错误,其实那一个功用编写翻译器也在做,可是角度差异,splint的角度是安全支出角度。

        此外值得调侃的时,如果你include了自定义头,splint会直接报错,当然那也是的的确确能够精通的。

 

<flawfinder>

        flawfinder让本人先调侃两句平复下内心,其实网上有各个安装包,当然官方也有,好端端的下载,解压,安装,,,然后您就会意识各个合法没涉及的依赖性难题</???像小编这么蠢的还有仨,官方并未设想到吗???>

        flawfinder的优势是词法扫描和剖析,内嵌了1部分尾巴数据库,如缓冲区溢出、格式化串漏洞等,扫描快,遵照代码中漏洞的高危害等级对漏洞举行私分,能够高速找到存在的标题,误报较高。

安装配置,Ant命令总括。        在运作了逐1平台之后,windows/parrot/kali/centos。。。。。。最后,居然Ubuntu的官方源里有安装包。

        喏,就这一句话~

        sudo apt-get install flawfinder

        然则调侃这么多,并从未让在读的您少走弯路的意趣,只是提供了最偷懒的路子。小编也喜好走弯路,走外人没走过,没走通的路,大概那么些进度才是大家真的享受的呢。

        咳咳,正题!

        美高梅开户网址 4

 

美高梅开户网址 5

        截不全就截不全吧,大家可从-help中看看它的大部作用了。

美高梅开户网址,        那里说下客户体验:算的上伪商业级的代码审计工具了,换句话说,误报概率还是挺大的,可是结果开始展览了很好的归类总计,并开始展览安全风险等级评估,命令行界面做到那种程度也是心肝了。

        喏,工具介绍就到此处呀。如有不足,欢迎指正。

 

 

笔者得以弱弱的丢个民用微信公众号么,

若果你们喜欢黑客,喜欢parrotsec,喜欢贰次元,期待认识我们。

才不是怎么着萝莉控,只是欣赏的女孩纸碰巧是萝莉罢了,哼~

 美高梅开户网址 6

想让您的vim具有C/CPP代码补全作用?推荐你使用YouCompleteMe工具。配置即使稍显麻烦,但在自家的一步步证实之下,您肯定能够做的老大好。

C语言未有图形库,就好像编写C语言的顺序就要直面十分黑黑的控制台窗口,那也是成百上千人对C语言提不起兴趣的由来,但大家得以选取第叁方的图形库,比如说open
GL,directX,SDL等等,个中SDL比较精细,并且是开源的,适合入门者学习。有了图形库以后大家就能够编写界面丰盛多彩的顺序了,你会发现一片新的世界!
   SDLSimple DirectMedia Layer)是2个即兴的跨平台的多媒体开发包,适用于
游戏、游戏SDK、演示软件、模拟器、MPEG播放器和任何使用软件。
 
 SDL图形库包含八个子系统:录像、音频、事件、光驱、文件读写、游戏杆、时间、进程。最日常选用的是前七个,每二个子种类都有专门的安装包:
    SDL安装包:

1 Ant是什么? 
Apache Ant 是四个基于 Java的变型工具。
变更工具在软件开发中用来将源代码和其余输入文件转换为可执行文件的情势(也有希望转换为可安装的成品印象格局)。随着应用程序的变更进度变得尤其扑朔迷离,确认保证在每便变更期间都采纳精确相同的扭转步骤,同时达成尽可能多的自动化,以便及时发出同样的生成版本
2 下载、安装Ant 
安装Ant
下载.zip文件,解压缩到c:\ant1.三(后边引用为%ANT_HOME%)

先是提一下多少个根本的工具以及其链接:

图像子系统安装包:

2.1 在您运营Ant在此以前须求做一些计划工作。
壹) 将bin目录参与PATH环境变量。 

  Vundle:它是三个vim的插件管理器,卓殊好用,要安装YouCompleteMe首先须要设置Vundle。

2) 设定ANT_HOME环境变量,指向您安装Ant的目录。在1部分OS上,Ant的本子能够猜想ANT_HOME(Unix和Windos
NT/3000)-但最佳不用借助那1特性。 

  YouCompleteMe:代码补全工具。

音频子系统安装包:

3)
可选地,设定JAVA_HOME环境变量(参考上面包车型客车高级小节),该变量应该指向你安装JDK的目录。
在意:不要将Ant的ant.jar文件放到JDK/JRE的lib/ext目录下。Ant是个应用程序,而lib/ext目录是为JDK扩张使用的(如JCE,JSSE扩张)。而且通过扩充装入的类会有平安地点的界定。

  CMake, llvm, clang等局地安装YouCompleteMe正视工具。

2.2 运行Ant 
运行Ant卓殊不难,当你正确地安装Ant后,只要输入ant就足以了。

实在呢,全部的安装步骤在Vundle,以及YouCompleteMe八个地方上边已经说的很透彻了,不过因为第3次安装,您可能未有太多种经营历,看到如此多必要安装的工具感到头大。下面大家一步一步来操作,笔者信任遵照上边的操作,您一定可以得手的成就代码补全作用。

那八个安装包都富含了那般五个目录:include和lib。在那之中include目录存放的头文件,就如C语言自带的头文件1律,要利用SDL系统的函
数,必须含有相应的头文件,lib目录下存放的是局地静态库.lib)和动态库.dll),这么些Curry存放的是函数的2进制代码,你在你的主次里富含了
头文件从此,还要加载相应的库,不然编写翻译器找不到相应的函数的代码会报错的,C语言自带的库暗中认可就添加到了您C语言程序里了,不用展现本身管,但SDL不是C语言自带的库,所以必须协调丰富这一个库。
要添加那几个库,有二种格局,第2种是把头文件,库文件放到系统目录下,让编写翻译器能找的到就能够了;第三种,本身建一个索引包涵头文件、动态库、静态库,然后在编译器里安装工程属性就足以了。建议利用第两种办法。下边就那二种艺术分别证实。

一) 未有点名其他参数时,Ant会在当前目录下查询build.xml文件。要是找到了就用该公文作为buildfile。要是你用
-find 选项。 
Ant就会在下面目录中找找buildfile,直至到达文件系统的根。要想让Ant使用其余的buildfile,能够用参数
– 
buildfile file,那里file钦命了你想利用的buildfile。

先是,您要保管你的vim版本号要大于柒.3.584,您能够经过在顶峰输入:

首先种方法,首先将SDL-devel-1.二.14-VC八.zip解压后会有七个目录:

二) 能够钦点执行多个或八个target。当省略target时,Ant使用标签<project>的default属性所内定的target。

vim --version

美高梅开户网址 7

指令行选项计算:
ant [options] [target [target2 [target3] …]]
Options:
-help  print this message
-projecthelp  print project help information
-version  print the version information and exit
-quiet be extra quiet
-verbose be extra verbose
-debug print debugging information
-emacs produce logging information without adornments
-logfile file use given file for log output
-logger classname the class that is to perform logging
-listener classname add an instance of class as a project listener
-buildfile file use specified buildfile
-find file search for buildfile towards the root of the filesystem and
use the first one found
-Dproperty=value set property to value 
例子
ant       (使用当前目录下的build.xml运维Ant,执行缺省的target)
ant -buildfile test.xml    
 (使用当前目录下的test.xml运营Ant,执行缺省的target)
ant -buildfile test.xml dist       
(使用当前目录下的test.xml运营Ant,执行二个誉为dist的target)
ant -buildfile test.xml -Dbuild=build/classes dist      
 (使用当前目录下的test.xml运营Ant,执行一个叫作dist的target,并设定build属性的值为build/classes)

来查阅您的vim的版本号。借使未有vim,您需求协调安装。

下一场到VS二零零七的装置目录下找到1个叫作include的目录,一般vs2005默许的设置目录是c:\Program
Files\Microsoft Visual Studio 8\VC或D:\Program Files\Microsoft
Visual Studio
8\VC,越发提示vs必须设置到英文目录名下,不然SDL不可能应用,SDL对中文援救糟糕。vs二〇一〇/vs20十也1律。

3 编写build.xml 

第二步,安装cmake

美高梅开户网址 8

Ant的buildfile是用XML写的。每一个buildfile含有一个project。

sudo apt-get install build-essential cmake

在vc下有三个include目录,在include目录下创造2个新目录,比如说SDL,将解压后的include目录下的文本拷贝到新建的SDL目录下。

buildfile中种种task成分能够有1个id属性,能够用这几个id值引用内定的职分。这几个值必须是唯一的。(详情请参考上面包车型地铁Task小节)

 第三步,安装 llvm 和 clang

D:\Program Files\Microsoft Visual Studio 8\VC

3.1 Projects

  到 www.llvm.org 下载相应版本的llvm和clang,因为本人用的是ubuntu 1四.04
6④bit的体系就此笔者一贯下载的pre-build
binary版本的而不须要下载源码再本身再一次编写翻译了。省去了诸多劳动。

将解压后的lib目录下后缀为lib的文书拷贝到安装目录下一个叫作lib目录下,将后缀为dll的公文拷贝到C:\WINDOWS\system32下。对SDL_image-devel-1.2.10-VC.zip和SDL_mixer-devel-一.二.11-VC.zip做一样的处理。

project有上面包车型地铁习性:
Attribute   Required   Description 
name        No           项目名称. 
default      Yes          当未有点名target时选择的缺省target 
basedir      No         
用于总计有所别的途径的基路径。该属性可以被basedir
property覆盖。当覆盖时,该属性被忽略。假诺属性和basedir
property都并未有设定,就选择buildfile文件的父目录。 
项目标叙述以多个世界级的<description>成分的款型现身(参看description小节)。

  下载完毕后,直接将下载后的压缩文件解压,并进入其目录

第贰各类措施,首先制造二个索引,假定名称为SDL,在目录下建两个文件夹:include、dll、lib,将下在下来的装置包解压,比如SDL-devel-一.2.1肆-VC8.zip解压后会有七个目录:

2个项目得以定义二个或八个target。1个target是一文山会海你想要执行的。执行Ant时,你能够挑选执行那叁个target。当未有给定target时,使用project的default属性所分明的target。

tar zxvf clang+llvm-3.7.0-amd64-Ubuntu-14.04..tar.gz
cd clang+llvm-3.7.0-amd64-Ubuntu-14.04.

美高梅开户网址 9

3.2 Targets

   其中 *.tar.gz正是你所下载的压缩文件。

将include目录下的头文件拷贝到SDL\include下,将lib目录下的后缀为.lib的文书拷贝到SDL\lib下,将lib下后缀为.dll的文件拷贝到SDL\dll下。对SDL_image-devel-1.2.10-VC.zip和SDL_mixer-devel-一.2.11-VC.zip做相同的拍卖。

贰个target能够借助于其余的target。例如,你大概会有三个target用于编写翻译程序,3个target用于转移可执行文件。你在转变可执行文件在此以前务必先编写翻译通过,所以生成可执行文件的target正视于编写翻译target。Ant会处理那种依赖关系。

  运维命令:

做完那个干活儿后,我们就足以在VC下创建二个控制台工程,选空工程,然后大家独家就率先种格局和第两种方式设置工程的属性。

只是,应当注意到,Ant的depends属性只钦命了target应该被执行的各种-假如被信赖的target不可能运营,那种depends对于内定了重视关系的target就从不影响。

sudo cp -R * /usr/

美高梅开户网址 10

Ant会依照depends属性中target现身的11(从左到右)依次执行各类target。但是,要牢记的是1旦有些target注重于二个target,后者就会被先实施。
<target name=”A”/>
<target name=”B” depends=”A”/>
<target name=”C” depends=”B”/>
<target name=”D” depends=”C,B,A”/>
要是大家要推行target D,  则会先执行A,然后B,然后C,最终D被执行。

 将引得里的拥有文件拷贝到相应的系统目录下,然后再配备一下软链接:

美高梅开户网址 11

八个target只好被实践二遍,即时有多少个target注重于它(看上边的事例)。

sudo ln -sf /usr/bin/clang++ /etc/alternatives/c++

新建2个test.c文件。

借使(或只要不)有个别品质被设定,才实施有个别target。那样,允许遵照系统的情形(java
version, OS,
命令行属性定义等等)来越来越好地控制build的进度。要想让三个target那样做,你就相应在target成分中,参加if(或unless)属性,带上target因该拥有判断的质量。例如:
<target name=”build-module-A” if=”module-A-present”/>
<target name=”build-own-fake-module-A”
unless=”module-A-present”/>
假若未有if或unless属性,target总会被实践。

   当中 “-sf”中 “s”代表了软链接,“f”即为force的意思。

美高梅开户网址 12

可选的description属性可用来提供有关target的一条龙描述,那个描述可由-projecthelp命令行选项输出。

运作:clang –version 如若你看来了它的本子号,就印证 llvm 和
clang配置好了。

在档次菜单里挑选属性。

将你的tstamp
task在1个所谓的开首化target是很好的做法,其余的target注重那个开始化target。要有限支撑早先化target是出现在别的target注重表中的第四个target。在本手册中多数的开始化target的名字是”init”。

第4步:安装Vundle,安装进程请参考
;P.S.
:假若您是率先次安装vim,大概必要本人创造vim的安顿文件,它是在 “~/ ”
目录下的的叁个潜伏文件 .vim 前边的“小点”就证明那是1个隐身的目录, 用 ls
-a才能查看,假诺未有,请创制该目录。即:mkdir ~/.vim

美高梅开户网址 13

target有上边包车型地铁品质:
Attribute     Required   Description               
name           Yes           target的名字D

布置好Vundle ,
请打开主目录下的.vimrc文件,那个文件是依照在此以前设置vundle时的步子配置好的,请在call
vundle#begin() 和 call vundle#end()  在里边添加 Plugin
‘Valloric/YouCompleteMe’, 别的,把begin() 和 end()之间除了Plugin ‘VundleVim/Vundle.vim’ 和 Plugin
‘Valloric/YouCompleteMe’之外的其它PlugIn 都注释掉把,感觉没什么卵用。

在弹出的窗口的左边的栏目里挑选链接器—输入,然后在右手区域选拔附加正视,弹出窗口。

depends       No         用逗号分隔的target的名字列表,也正是依赖表。 
if                 No         执行target所必要设定的属性名。 
unless          No         执行target需求排除设定的属性名。 
description   No        关于target功用的回顾描述。

第四步:利用Vundle安装插件

美高梅开户网址 14

3.3 Tasks

  分外简单,在终极中开辟vim, 输入” :PluginInstall  “,
等待Vundle安装收尾。那说不定须要开销1段时间。当vim的底栏显示:Done!(注意不是Done
with error !!!) 就象征安装成功。

美高梅开户网址 15

1个task是壹段可实施的代码。

第4步:编写翻译YouCompleteMe, 为了不保障出错,作者用的是完全安装的艺术。

在附加重视窗口里如下图填写正视文件,然后点击鲜明按钮。

二个task能够有多少个属性(要是您愿意的话,可以将其称为变量)。属性只可能包蕴对property的引用。这个引用会在task执行前被分析。

cd ~
mkdir ycm_build
cd ycm_build

美高梅开户网址 16

上边是Task的1般构造样式:
<name attribute1=”value1″ attribute2=”value2″ … />
此间name是task的名字,attributeN是属性名,valueN是属性值。

   因为笔者要援助C/CPP的语义援救,小编接纳:

在左边栏采取c/c++下的代码生成。在右手窗口中做如下设置:

有一套内置的(built-in)task,以及部分可选task,但你也能够编写制定自身的task。

cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

美高梅开户网址 17

负有的task都有八个task名字属性。Ant用属性值来产出生之日志新闻。

  那里,笔者选取选取系统的libclang,因为大家也从官网下载了LLVM+Clang(该目录下有
bin, lib, include
等文件夹),大家也能够进行:cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp 其中“~/ycm_temp/llvm_root_dir”就是大家解压过的文书的根目录

如此,大家就布署好了工程的质量,工程安插无论是第一种方法照旧第二种办法都要配置。

可以给task赋一个id属性:
<taskname id=”taskID” … />
此间taskname是task的名字,而taskID是其1task的唯一标识符。通过那几个标识符,你能够在剧本中引用相应的task。例如,在本子中你能够那样:
<script … >
task1.setFoo(“bar”);
</script>
设定有个别task实例的foo属性。在另四个task中(用java编写),你能够接纳下边的话语存取相应的实例。
project.getReference(“task1”).
在意一:如若task一还从未运转,就不会被生效(例如:不设定属性),假若您在随着安排它,你所作的凡事都会被遮住。
留神2:今后的Ant版本或然不会协作那里所提的属性,因为很有极大希望平素未有task实例,唯有proxies。

第七步:生成

下边在test.cpp 里输入测试代码:

3.4 Properties

make ycm_support_libs

美高梅开户网址 18

四个project能够有很多的properties。能够在buildfile中用property
task来设定,或在Ant之外设定。一个 
property有二个名字和3个值。property可用来task的属性值。那是因此将属性名放在”${“和”}”之间并放在属性值的地点来完毕的。例如如若有一个property
builddir的值是”build”,那么些property就可用于属性值:${builddir} 
/classes。这些值就可被分析为build/classes。

 到此甘休,基本的配备工作就完结了,但是还有某个缺陷:#include
<iostream>, #include <stdio> vector,
什么的都无法补全,那是因为这一个头文件的门道未有被找到,上边包车型大巴干活正是要让YouCompleteMe找到这么些头文件,而且,以往有如何库文件,比如OpenCV,OPenGL什么的,都能够遵照这一个办法添加。

 1 #include <stdio.h>
 2
 3 #include <stdlib.h>
 4
 5 #include <SDL\SDL.h>
 6
 7 SDL_Surface *gpScreen;
 8
 9int main(int argc,char *argv[])
10
11 {
12
13if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
14
15 exit(-1);
16
17 }
18
19 gpScreen = SDL_SetVideoMode(600,600, 0,
20
21 SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF );
22
23if( NULL == gpScreen ) {
24
25 SDL_Quit();
26
27return -1;
28
29 }
30
31 SDL_Delay(3000);
32
33 SDL_FreeSurface(gpScreen);//退出程序前必须释放
34
35 SDL_Quit();//关闭SDL各个子系统
36
37 system("pause");
38
39return0;
40
41 }

松开属性

  打开 ~/下的.vimrc文件,确认保证查看是还是不是有如此一条配置:

美高梅开户网址 19

借使您采纳了<property> task
定义了有着的体系质量,Ant允许你利用这一个属性。例如,${os.name}对应操作系统的名字。

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

在意必须含有头文件<SDL\SDL.h>,个中SDL是您在装置目录\include下建立的目录,vc全数的头文件都在include目录下,大家引用stdio.h等头文件都以从include下寻找的,
SDL.h在include下SDL目录下,所以引用它必须用#inlcude < SDL\SDL.h
>,再者主函数头必须那样写int main(int argc,char
*argv[]),不能够写成int main(void)。

要想得到系统品质的列表可参考the Javadoc of System.getProperties。

 若是未有,请修改.ycm_extra_conf.py的路径是天经地义的。

假设编写翻译通过,运转的时候会产出七个窗口:

除开Java的种类质量,Ant还定义了有个别和谐的内置属性: 
basedir   project基目录的断然路径
(与<project>的basedir属性1样)。
ant.file   buildfile的相对路径。
ant.version  Ant的版本。
ant.project.name   当前施行的project的名字;由<project>的name属性设定.
ant.java.version    Ant检查实验到的JVM的本子; 方今的值有”一.一”, “1.二”, “一.3”
and “1.4”.

  打开 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

美高梅开户网址 20

例子

vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

那么声明你sdl安装成功,能够编写制定游戏了。

美高梅开户网址 21

 您能够在flags[ * ]数组的前边添加你想要的路线,例如:
stdio.h等C语言的头文件包括在/usr/include中,那么您须要添加那样一条

如若是第三种办法,打开vc的工具菜单-选项:

<project name="MyProject" default="dist" basedir="."> 
<!-- set global properties for this build -->
<property name="src" value="."/>
<property name="build" value="build"/>
<property name="dist" value="dist"/> 

<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>

<target name="compile" depends="init">
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>

<target name="dist" depends="compile">
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>

<target name="clean">
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>

‘-isystem’,

美高梅开户网址 22

美高梅开户网址 23

‘/usr/include’,

在选拔窗口里左手栏里采用种类和平化解决方案—vc++目录vs20十下无法配备,因为vs20十vc++目录下没有这几个事物)

3.5 Path-like Structures
您可以用”:”和”;”作为分隔符,钦点类似PATH和CLASSPATH的引用。Ant会把分隔符转换为日前系统所用的分隔符。

专注,不要遗忘前边的“,”。

美高梅开户网址 24

当必要钦点类似路径的值时,能够行使嵌套成分。壹般的款式是
<classpath>
<pathelement path=”${classpath}”/>
<pathelement location=”lib/helper.jar”/>
</classpath>
location属性钦点了相对于project基目录的二个文本和目录,而path属性接受逗号或分行分隔的叁个任务列表。path属性一般作为预约义的途径--别的景况下,应该用多少个location属性。

内需CPP的补全,就供给加上:

在“展现以下内容的目录”—富含文件,点击
美高梅开户网址 25

为简单起见,classpath标签扶助本人的path和location属性。所以:
<classpath>
<pathelement path=”${classpath}”/>
</classpath>
能够被简写作:
<classpath path=”${classpath}”/>
也可由此<fileset>成分钦命路线。构成二个fileset的多个公文参预path-like
structure的种种是未定的。
<classpath>
<pathelement path=”${classpath}”/>
<fileset dir=”lib”>
<include name=”**/*.jar”/>
</fileset>
<pathelement location=”classes”/>
</classpath>
上边的例证构造了3个路径值包蕴:${classpath}的路子,跟着lib目录下的兼具jar文件,接着是classes目录。

‘-isystem’,

美高梅开户网址 26

假设你想在八个task中选择同样的path-like
structure,你能够用<path>成分定义他们(与target同级),然后通过id属性引用--参考Referencs例子。

‘/usr/include/c++/4.7’,

点击 美高梅开户网址 27
,选拔你按第三种办法确立的SDL目录下的include目录

path-like structure只怕包蕴对另八个path-like
structurede的引用(通过嵌套<path>成分):
<path id=”base.path”>
<pathelement path=”${classpath}”/>
<fileset dir=”lib”>
<include name=”**/*.jar”/>
</fileset>
<pathelement location=”classes”/>
</path>
<path id=”tests.path”>
<path refid=”base.path”/>
<pathelement location=”testclasses”/>
</path>
前边所提的有关<classpath>的简单写法对于<path>也是行得通的,如:
<path id=”tests.path”>
<path refid=”base.path”/>
<pathelement location=”testclasses”/>
</path>
可写成:
<path id=”base.path” path=”${classpath}”/>
指令行变量

亟需什么,就添加什么样,so easy .

美高梅开户网址 28

些微task可承受参数,并将其传递给另1个进度。为了能在变量中富含空格字符,可使用嵌套的arg元素。
Attribute Description Required
value 1个下令行变量;可含蓄空格字符。 只可以用2个
line 空格分隔的通令行变量列表。 
file 作为命令行变量的文本名;会被文件的断然名代表。 
path
二个作为单个命令行变量的path-like的字符串;或当作分隔符,Ant会将其转移为一定平台的分隔符。 

如出1辙的格局,接纳“库文件”

例子
<arg value=”-l -a”/>
是二个分包空格的单个的一声令下行变量。
<arg line=”-l -a”/>
是两个空格分隔的通令行变量。
<arg path=”/dir;/dir2:\dir3″/>
是三个指令行变量,其值在DOS系统上为\dir;\dir2;\dir三;在Unix系统上为/dir:/dir2:/dir叁。

美高梅开户网址 29

References

点击 美高梅开户网址 30
,选取你按第三种艺术确立的SDL目录下的lib目录

buildfile成分的id属性可用来引用这个要素。假使你需求贰次遍的复制相同的XML代码块,这一性质就很有用--如多次采纳<classpath>结构。

美高梅开户网址 31

上边包车型大巴例子:

动态库的路子能够如此充分,右键小编的微处理器—属性,选用高档。

美高梅开户网址 32

美高梅开户网址 33

<project ... >
<target ... > 
<rmic ...> 
<classpath> 
<pathelement location="lib/"/> 
<pathelement path="${java.class.path}/"/> 
<pathelement path="${additional.path}"/> 
</classpath> 
</rmic> 
</target>
<target ... >
<javac ...>
<classpath>
<pathelement location="lib/"/>
<pathelement path="${java.class.path}/"/>
<pathelement path="${additional.path}"/>
</classpath>
</javac>
</target>
</project>

点击环境变量按钮。

美高梅开户网址 34

美高梅开户网址 35

能够写成如下情势:

在系统变量下抉择path

美高梅开户网址 36

美高梅开户网址 37

<project ... > 
<path id="project.class.path"> 
<pathelement location="lib/"/>
<pathelement path="${java.class.path}/"/> 
<pathelement path="${additional.path}"/> 
</path>
<target ... >
<rmic ...>
<classpath refid="project.class.path"/>
</rmic>
</target>
<target ... > 
<javac ...>
<classpath refid="project.class.path"/>
</javac>
</target>
</project>

点编辑

美高梅开户网址 38

美高梅开户网址 39

负有应用PatternSets, FileSets 或 path-like
structures嵌套成分的task也承受那系列型的引用。
 
4 Ant的Core Tasks

在变量值的终极面,添加一个支行西方文字状态),然后将你按第3种办法确立的SDL目录下的dll目录的门径写下,如下图。

1、copy命令

美高梅开户网址 40

copy主要用来对文件和目录的复制作用。举例如下:
● 复制单个文件:

末尾面自然要有贰个\。

 代码如下:

第三种方式安排达成后,也要按第二种方法铺排项目性质,添加注重项。

1 < copy file="old.txt" tofile="new.txt"/>

为什么要用第两种办法呢,因为第一种艺术往系统目录下添加文件,大概覆盖任何程序的文件,从而影响别的程序的运用,所以选择第三种格局,第二种格局不会影响别的程序。


● 对文件目录进行理并答复制:

现今,SDL环境就配置达成了,下一遍将研讨简单的SDL起动。

代码如下:

正文出自 “学习之乐”
博客,请务必保留此出处

1 < copy todir="../dest_dir"> 
2     <fileset dir="src_dir"/> 
3 < /copy>

● 将文件复制到别的的目录:

代码如下:

 1 < copy
file=”src.txt”
todir=”c:/base”/> 


2、delete命令

 

对文本或目录实行删除,举例如下:

● 删除有些文件:

代码如下:

 1 < delete
file=”/res/image/cat.jpg”/> 


● 删除有个别目录:   

 代码如下:

 1 < delete
dir=”/res/image”/> 


● 删除全部的jar文件或空目录:

代码如下:

1 < delete includeEmptyDirs="true"> 
2        <fileset dir="." includes="**/*.jar"/> 
3 < /delete>

 

3、 mkdir 命令

创造目录。

代码如下:

 1 < mkdir
dir=”/home/philander/build/classes”/> 

 

4、 move 命令

一举手一投足文件或目录,举例如下:
● 移动单个文件:

代码如下:

 1 < move
file=”sourcefile”
tofile=”destfile”/> 

● 移动单个文件到另2个索引:

代码如下:

 1 < move
file=”sourcefile”
todir=”movedir”/> 


● 移动某些目录到另一个索引:

代码如下:

1 < move todir="newdir"> 
2     <fileset dir="olddir"/> 
3 < /move>

 

5、echo 命令

该任务的功力是依照日志或监察和控制器的级别输出音讯。它总结 message 、 file 、
append 和 level 多少个天性,举例如下

1 <echo message="ant message" file="/logs/ant.log" append="true">

六、jar 标签节点成分

该标签用来生成1个JA奥迪Q5文件,其性质如下。
● destfile表示JAR文件名。
● basedir表示被归档的文书名。
● includes表示别归档的文书格局。
● exchudes表示被清除的文本形式。

● compress表示是或不是减少。

示例:

代码如下:

1 < jar destfile="${webRoot}/${ash_jar}" level="9" compress="true" encoding="utf-8" basedir="${dest}">
2     <manifest>
3         <attribute name="Implementation-Version" value="Version: 2.2"/>
4     </manifest>
5 < /jar>


地点的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件内容

 

同等打包操作的的还有war、tgz,已经解压操作uzip

 代码如下:

 1 < !-- 创建zip -->
 2 < zip basedir="${basedir}\classes" zipfile="temp\output.zip"/> 
 3 < !-- 创建tgz -->
 4 < gzip src="classes\**\*.class" zipfile="output.class.gz"/>
 5 < !-- 解压zip -->
 6 < unzip src="output.class.gz" dest="extractDir"/>
 7 < !-- 建立war包 -->
 8 < war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
 9     <exclude name="WEB-INF/classes/**"/>
10     <exclude name="WEB-INF/lib/**"/>
11     <exclude name="WEB-INF/work/_jsp/**"/>
12     <lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
13         <exclude name="${webRoot}\${helloworld_jar}"/>
14     </lib>
15     <lib file="${webRoot}/${helloworld_jar}"/>
16     <classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
17 < /war>

 

7、javac 标签节点成分

该标签用于编写翻译二个或一组java文件,其性质如下。
● srcdir表示源程序的目录。
● destdir表示class文件的出口目录。
● include表示被编写翻译的文书的方式。
● excludes表示被免除的文书的情势。
● classpath代表所采纳的类路径。
● debug代表包涵的调节和测试新闻。
● optimize代表是或不是利用优化。
● verbose 代表提供详实的出口音信。
● fileonerror代表当蒙受错误就活动甘休。

示例

 代码如下:

1 < javac srcdir="${src}" destdir="${dest}"/>
2 < !-- 设置jvm内存
3 <javac srcdir="src" fork="true"/> 
4 < javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" 
5 memoryMaximumSize="128m"/> 
6 -->

 

八、java 标签节点成分

该标签用来施行编写翻译生成的.class文件,其性质如下。
● classname 代表将实施的类名。
● jar代表包罗该类的JA福睿斯文件名。
● classpath所代表用到的类路径。
● fork代表在叁个新的虚拟机中运营该类。
● failonerror表示当出现谬误时自动甘休。
● output 代表输出文件。
● append表示追加或许覆盖暗许文件。

示例

代码如下:

 1 < java
classname=”com.hoo.test.HelloWorld” classpath=”${hello_jar}”/> 

 

9、arg 数据参数成分

由Ant营造文件调用的程序,能够由此<arg>成分向其传递命令行参数,如apply,exec和java职分均可承受嵌套<arg>成分,能够为独家的进度调用钦命参数。以下是<arg>的有着属性。
● values
是八个限令参数。如果参数中有空格,但又想将它当做独立3个值,则使用此属性。
● file
代表一个参数的文书名。在营造文件中,此文件名相对于当下的办事目录。
● line 表示用空格分隔的八个参数列表。

表示路径,2个看成单个命令行变量的path-like的字符串;或当作分隔符,Ant会将其变动为一定平台的分隔符。
● pathref 引用的path(使用path元素秋点定义path)的id
● prefix 前缀
● suffix 后缀

例子

代码如下:

 1 < arg
value=”-l -a”/> 


是3个包括空格的单个的命令行变量。

代码如下:

 1 < arg
line=”-l -a”/> 


是三个空格分隔的命令行变量。

代码如下:

 1 < arg
path=”/dir;/dir2:\dir3″/> 


是叁个命令行变量,其值在DOS系统上为\dir;\dir2;\dir三;在Unix系统上为/dir:/dir二:/dir3。

 

10、ervironment 类型

由Ant营造文件调用的外部命令或程序,<env>元素制定了什么样环境变量要传送给正在实施的系统命令,<env>元素得以接受以下属性。
● file代表环境变量值的文本名。此文件名要被转移位3个相对路径。
● path表示环境变量的门道。Ant会将它转换为2个本土约定。
● value 代表环境变量的2个直接变量。
● key 表示环境变量名。
留意 file path 或 value只好取2个。

1一、filelist 文件集合列表

filelist
是一个扶助命名的公文列表的数据类型,包罗在1个filelist类型中的文件不必然是存在的文书。以下是其负有的性质。
● dir是用来总计相对文件名的目录。
● files 是用逗号分隔的文件名列表。
● refid 是对某处定义的叁个<filelist>的引用。
在意 dir 和 files
都以必备的,除非钦定了refid(那种情景下,dir和files都不容许行使)。

示例

 代码如下:

 1 < filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml"/> 
 2 文件集合 ${doc.src}/foo.xml和${doc.src}/bar.xml. 这些文件也许还是不存在的文件.
 3 < filelist id="docfiles" dir="${doc.src}" files="foo.xml bar.xml"/> 
 4  
 5 < filelist refid="docfiles"/> 
 6  
 7 < filelist id="docfiles" dir="${doc.src}">
 8     <file name="foo.xml"/>
 9     <file name="bar.xml"/>
10 < /filelist>

 

1二、fileset 文件类型

fileset
数据类型定义了壹组文件,并常常表示为<fileset>成分。可是,许多ant职责营造成了隐式的fileset,那表明她们支撑具有的fileset属性和嵌套成分。以下为fileset
的性格列表。
● dir表示fileset 的基目录。

casesensitive的值假诺为false,那么相称文件名时,fileset不是分别轻重缓急写的,其暗中认可值为true.
● defaultexcludes 用来规定是还是不是采用暗中同意的清除方式,暗许为true。
● excludes 是用逗号分隔的内需派出的文书格局列表。
● excludesfile 代表每行李包裹蕴二个去掉情势的文本的文本名。
● includes 是用逗号分隔的,必要包罗的文件形式列表。
● includesfile 代表每行包蕴3个包括形式的文书名。

示例

 代码如下:

 1 < fileset id="lib.runtime" dir="${lib.path}/runtime">
 2     <include name="**/*.jar"/>
 3     <include name="**/*.so"/>
 4     <include name="**/*.dll"/>
 5 < /fileset>
 6  
 7 < fileset id="lib.container" dir="${lib.path}/container">
 8     <include name="**/*.jar"/>
 9 < /fileset>
10  
11 < fileset id="lib.extras" dir="${lib.path}">
12     <include name="test/**/*.jar"/>
13 < /fileset>

13、patternset 类型

fileset
是对文件的分组,而patternset是对情势的分组,他们是密不可分相关的概念。

<patternset>支持4个属性:includes、excludex、includexfile、excludesfile,这些与fileset相同。

patternset 还同意以下嵌套成分:include,exclude,includefile 和
excludesfile.

示例

代码如下:

 1 < !-- 黑白名单 -->
 2 < patternset id="non.test.sources">
 3   <include name="**/*.java"/>
 4   <!-- 文件名包含Test的排除 -->
 5   <exclude name="**/*Test*"/>
 6 < /patternset>
 7  
 8  
 9 < patternset id="sources">
10   <include name="std/**/*.java"/>
11   <!-- 判断条件 存在professional就引入 -->
12   <include name="prof/**/*.java" if="professional"/>
13   <exclude name="**/*Test*"/>
14 < /patternset>
15  
16 < !-- 一组文件 -->
17 < patternset includesfile="some-file"/>
18 < patternset>
19   <includesfile name="some-file"/> 
20 < patternset/>
21  
22 < patternset>
23   <includesfile name="some-file"/> 
24   <includesfile name="${some-other-file}" if="some-other-file"/> 
25 < patternset/>

 

14、filterset 类型

filterset定义了一组过滤器,那么些过滤器将在文件移动或复制时形成文件的文本替换。
最主要品质如下:
● begintoken 表示嵌套过滤器所搜索的号子,那是标识其初步的字符串。
● endtoken 表示嵌套过滤器所搜索的标记那是标识其得了的字符串。
● id 是过滤器的唯壹标志符。
● refid 是对创设文件中某处定义二个过滤器的引用。

示例

代码如下:

 1 < !-- 将目标文件build.dir目录中的version.txt文件内容中的@DATE@替换成TODAY当前日期的值,并把替换后的文件存放在dist.dir目录中 -->
 2 < copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
 3   <filterset>
 4     <filter token="DATE" value="${TODAY}"/>
 5   </filterset>
 6 < /copy>
 7  
 8 < !-- 自定义变量的格式 -->
 9 < copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
10   <!-- 从version.txt中的%位置开始搜索,到*位置结束,进行替换内容中的@DATE@替换成TODAY当前日期的值-->
11   <filterset begintoken="%" endtoken="*">
12     <filter token="DATE" value="${TODAY}"/>
13   </filterset>
14 < /copy>
15  
16 < !-- 使用外部的过滤定义文件 -->
17 < copy toDir="${dist.dir}/docs">
18   <fileset dir="${build.dir}/docs">
19     <include name="**/*.html">
20   </fileset>
21   <filterset begintoken="%" endtoken="*">
22     <!-- 过来文件从外部引入,过来的属性和值配置在dist.properties文件中 --> 
23     <filtersfile file="${user.dir}/dist.properties"/>
24   </filterset>
25 < /copy>
26  
27 < !-- 使用引用方式,重复利用过滤集 -->
28 < filterset id="myFilterSet" begintoken="%" endtoken="*">
29   <filter token="DATE" value="${TODAY}"/>
30 < /filterset>
31  
32 < copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
33   <filterset refid="myFilterSet"/>
34 < /copy>

 

15、path类型

path成分用来代表叁个类路径,可是它还能用于表示其他的不二等秘书诀。在作为几本性牛时,路经中的各项用分号或冒号隔断。在营造的时候,此分隔符将代替当前平苏州持有的门道分隔符,其兼具的习性如下。
● location 表示叁个文件或目录。Ant在其间将此扩展为二个相对路径。
● refid 是对脚下构建文件中某处定义的2个path的引用。
● path表示二个文件或路径名列表。

示例

代码如下:

 1 < path id="buildpath">
 2     <fileset refid="lib.runtime"/>
 3     <fileset refid="lib.container"/>
 4     <fileset refid="lib.extras"/>
 5 < /path>
 6  
 7 < path id="src.paths">
 8     <fileset id="srcs" dir=".">
 9         <include name="src/**/*.java"/>
10     </fileset>
11 < /path>

 

ant编写翻译打包、运维工程

代码如下:

  1 < ?xml version="1.0" encoding="UTF-8"?>
  2 < !-- name是当前工程的名称,default是默认执行的任务,basedir是工作目录(.代表当前根目录) -->
  3 < project name="HelloWorld" default="run" basedir=".">
  4     <!-- property类似于程序中定义简单的变量 -->
  5     <property name="src" value="src"/>
  6     <property name="dest" value="classes"/>
  7     <property name="hello_jar" value="helloWorld.jar"/>
  8     <!-- 
  9     target是一个事件、事情、任务, name是当前事情的名称,depends是依赖的上一件或是多件事情
 10     如果所依赖的事情没有执行,ant会先运行依赖事情,然后再运行当前事情
 11     -->
 12     
 13     <!-- 初始化 -->
 14     <target name="init">
 15         <!-- 建立classes目录 -->
 16         <mkdir dir="${dest}"/>
 17         <mkdir dir="temp"/>
 18         <mkdir dir="temp2"/>
 19     </target>
 20     
 21     <!-- 编译 -->
 22     <target name="compile" depends="init">
 23         <javac srcdir="${src}" destdir="${dest}"/>
 24         <!-- 设置jvm内存
 25         <javac srcdir="src" fork="true"/> 
 26         <javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" 
 27         memoryMaximumSize="128m"/> 
 28         -->
 29     </target>
 30     
 31     <!-- 建立jar包 -->
 32     <target name="build" depends="compile">
 33         <!-- 
 34         <jar jarfile="${hello_jar}" basedir="${dest}"/>
 35         创建一个名称是package.jar文件
 36         <jar destfile="package.jar" basedir="classes"/> 
 37         -->
 38         <jar destfile="${hello_jar}" basedir="classes"> 
 39             <!-- 向jar包中的main文件中添加内容 -->
 40             <manifest> 
 41                 <attribute name="Built-By" value="${user.name}"/> 
 42                 <attribute name="Main-class" value="package.Main"/> 
 43             </manifest> 
 44         </jar> 
 45         <!-- 复制jar文件  todir="复制到目录"-->
 46         <copy file="${hello_jar}" tofile="${dest}\temp.jar"/> 
 47         <copy todir="temp"> 
 48             <!-- 不按照默认方式 defaultexcludes="" -->
 49               <fileset dir="src"> 
 50                 <include name="**/*.java"/>
 51               </fileset> 
 52         </copy> 
 53         
 54         <copy todir="temp2"> 
 55             <fileset dir="src">
 56                 <and>
 57                     <contains text="main"/> 
 58                     <size value="1" when="more"/> 
 59                 </and>
 60             </fileset>
 61         </copy> 
 62         
 63         <!-- 移动jar文件 -->
 64         <move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/> 
 65         <!-- 创建zip -->
 66         <zip basedir="${basedir}\classes" zipfile="temp\output.zip"/> 
 67         <!-- 创建tgz -->
 68         <gzip src="classes\**\*.class" zipfile="output.class.gz"/>
 69         <!-- 解压zip -->
 70         <unzip src="output.class.gz" dest="extractDir"/> 
 71         <!--替换input.txt内容中的old为new
 72         <replace file="input.txt" token="old" value="new"/>
 73         --> 
 74     </target>
 75     
 76     <!-- 运行 -->
 77     <target name="run" depends="build">
 78         <java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
 79     </target>
 80     
 81     <!-- 清除 -->
 82     <target name="clean">
 83         <!-- 删除生成的文件 -->
 84         <delete dir="${dest}"/>
 85         <delete file="${hello_jar}"/>
 86     </target>
 87     
 88     <tstamp> 
 89        <format property="OFFSET_TIME" 
 90                pattern="HH:mm:ss" 
 91                offset="10" unit="minute"/> 
 92     </tstamp>
 93     
 94     <!-- 重新运行 -->
 95     <target name="rerun" depends="clean,run">
 96         <echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
 97         <aunt target="clean"/>
 98         <aunt target="run"/>
 99     </target>
100 < /project>

 

要说的的东西基本上就那么多,ant还有无数剧情并未有提到,有趣味的能够协调去琢磨讨论。ant简单,你用它如同在docs控制台输入命令行一样,只但是ant是将下令行转换为xml的剧本音讯,能够开始展览重新的运作。在必然景况下,进步了功用和另行的行事。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图