zoukankan      html  css  js  c++  java
  • fitnesse(gradle构建)安装步骤

    1.安装jdk、ant、gradle(参考http://www.cnblogs.com/274914765qq/p/4401525.html)

    2.下载Fitnesse

    https://github.com/unclebob/fitnesse/

    3.下载完成后,解压,并双击gradlew.bat,然后等待完成(时间较长)。

    4.完成后,通过命令行进入fitnesse-master并使用下面的命令运行(会下载很多包,时间较长):

    .gradlew run

    5.eclipse 安装gradle插件
    参考:http://blog.csdn.net/buqutianya/article/details/50226721


    6.将Fitnesse导入eclipse

    a. File -> Import... -> Gradle Project

    b. 选择fitnesse-master目录,确认后导入

    7 例子

    参考 http://www.cnblogs.com/moonpool/p/5547549.html 

    上面的例子中是使用ant工具构建的,现在新的fitnesse是使用gradle工具构建,所以在使用第三方的jar包时有些变化。

    修改build.gradle文件

      1 /* Plan:
      2  - Create multi-module repo:
      3    - fit (deps: common)
      4    - slim (deps: common, networking)
      5    - common
      6    - networking
      7    - ant
      8    - fitnesse, the wiki server
      9  - Move file creation to plugin
     10 */
     11 
     12 buildscript {
     13     repositories {
     14         mavenCentral()
     15     }
     16     dependencies {
     17         classpath 'info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.9'
     18     }
     19 }
     20 
     21 plugins {
     22   id 'java'
     23   id "maven-publish"
     24   id "com.jfrog.bintray" version "1.6"
     25 }
     26 
     27 apply plugin: "info.solidsoft.pitest"
     28 
     29 
     30 version = new Date().format('yyyyMMdd')
     31 
     32 println "Building FitNesse v${project.version}..."
     33 
     34 repositories {
     35   mavenCentral()
     36 }
     37 
     38 configurations {
     39   lesscss
     40   optional
     41   compile {
     42     transitive = false
     43     extendsFrom optional
     44   }
     45   runtime {
     46     transitive = false
     47   }
     48 }
     49 
     50 sourceSets {
     51   main {
     52     java.srcDir 'src'
     53     resources.srcDir 'src'
     54     output.resourcesDir output.classesDir
     55   }
     56   test {
     57     java.srcDir 'test'
     58   }
     59 }
     60 
     61 sourceCompatibility = '1.7'
     62 targetCompatibility = '1.7'
     63 
     64 dependencies {
     65   compile "org.htmlparser:htmlparser:2.1"
     66   compile "org.htmlparser:htmllexer:2.1"
     67   compile "org.apache.velocity:velocity:1.7"
     68   compile "commons-lang:commons-lang:2.6"
     69   compile "commons-collections:commons-collections:3.2.2"
     70   compile "org.json:json:20151123"
     71   compile "com.googlecode.java-diff-utils:diffutils:1.3.0"
     72   optional "org.apache.ant:ant:1.9.6"
     73   optional "junit:junit:4.12"
     74 
     75   testCompile "junit:junit:4.12"
     76   testCompile "org.mockito:mockito-core:1.10.19"
     77   testCompile "org.hamcrest:hamcrest-all:1.3"
     78   testCompile "net.javacrumbs.json-unit:json-unit:1.1.6"
     79   
     80   compileOnly files('lib/joda-time-2.3.jar')
     81 
     82   lesscss "org.mozilla:rhino:1.7.7.1"
     83 }
     84 
     85 task fitNesseVersion {
     86   def versionFile = new File("${sourceSets.main.output.resourcesDir}/META-INF/FitNesseVersion.txt")
     87   versionFile.parentFile.mkdirs()
     88   versionFile.text="v${version}"
     89 }
     90 
     91 task compileBootstrap(type: LessCompiler) {
     92   inputDir file('src/fitnesse/resources/bootstrap/less')
     93   mainLessFile = 'fitnesse-bootstrap.less'
     94   cssFile file("${sourceSets.main.output.resourcesDir}/fitnesse/resources/bootstrap/css/fitnesse-bootstrap.css")
     95   classpath configurations.lesscss
     96 }
     97 
     98 task createUpdateLists(type: WikiFileListBuilderTask) {
     99   outputDirectory = "${sourceSets.main.output.resourcesDir}/Resources"
    100   doNotReplaceFiles = [
    101     "FitNesseRoot/FrontPage/content.txt",
    102     "FitNesseRoot/FrontPage/properties.xml",
    103     "FitNesseRoot/PageHeader/content.txt",
    104     "FitNesseRoot/PageHeader/properties.xml",
    105     "FitNesseRoot/PageFooter/content.txt",
    106     "FitNesseRoot/PageFooter/properties.xml",
    107     "FitNesseRoot/PageFooter/properties.xml",
    108     "FitNesseRoot/TemplateLibrary/content.txt",
    109     "FitNesseRoot/TemplateLibrary/properties.xml",
    110     "FitNesseRoot/TemplateLibrary/StaticPage/content.txt",
    111     "FitNesseRoot/TemplateLibrary/StaticPage/properties.xml",
    112     "FitNesseRoot/TemplateLibrary/SuitePage/content.txt",
    113     "FitNesseRoot/TemplateLibrary/SuitePage/properties.xml",
    114     "FitNesseRoot/TemplateLibrary/TestPage/content.txt",
    115     "FitNesseRoot/TemplateLibrary/TestPage/properties.xml" ]
    116   mainDirectories = [
    117     "FitNesseRoot/FitNesse",
    118     "FitNesseRoot/FrontPage",
    119     "FitNesseRoot/PageFooter",
    120     "FitNesseRoot/PageHeader",
    121     "FitNesseRoot/TemplateLibrary" ]
    122 }
    123 
    124 processResources.dependsOn "fitNesseVersion", "compileBootstrap", "createUpdateLists"
    125 
    126 task copyRuntimeLibs(type: Copy) {
    127   into "lib"
    128   from configurations.runtime
    129 }
    130 
    131 test {
    132   dependsOn copyRuntimeLibs
    133   maxParallelForks 1
    134 }
    135 
    136 pitest {
    137   targetClasses = ['fit.*', 'fitnesse.*']
    138   pitestVersion = "1.1.10"
    139   threads = 1 // We can not deal with parallel execution yet
    140   outputFormats = ['XML', 'HTML']
    141 }
    142 
    143 task run(type: JavaExec) {
    144   dependsOn classes, copyRuntimeLibs
    145   classpath = sourceSets.main.runtimeClasspath
    146   main "fitnesseMain.FitNesseMain"
    147   args "-p", "8001", "-e", "0"
    148 }
    149 
    150 jar {
    151   dependsOn createUpdateLists
    152   into('Resources') {
    153     from('.') {
    154       include 'FitNesseRoot/FitNesse/**/content.txt'
    155       include 'FitNesseRoot/FitNesse/**/properties.xml'
    156       include 'FitNesseRoot/FrontPage/**/content.txt'
    157       include 'FitNesseRoot/FrontPage/**/properties.xml'
    158       include 'FitNesseRoot/PageFooter/**/content.txt'
    159       include 'FitNesseRoot/PageFooter/**/properties.xml'
    160       include 'FitNesseRoot/PageHeader/**/content.txt'
    161       include 'FitNesseRoot/PageHeader/**/properties.xml'
    162       include 'FitNesseRoot/TemplateLibrary/**/content.txt'
    163       include 'FitNesseRoot/TemplateLibrary/**/properties.xml'
    164     }
    165   }
    166   manifest {
    167     attributes("Main-Class": "fitnesseMain.FitNesseMain",
    168         "Implementation-Version": version)
    169   }
    170 }
    171 
    172 task standaloneJar(type: Jar, dependsOn: jar) {
    173   baseName = 'fitnesse'
    174   classifier = 'standalone'
    175   from {
    176     (configurations.compile - configurations.optional).collect { zipTree(it) }
    177   } {
    178     exclude 'META-INF/**'
    179   }
    180   from jar.outputs.files.collect {
    181     zipTree(it)
    182   }
    183   manifest {
    184     attributes("Main-Class": "fitnesseMain.FitNesseMain",
    185         "Implementation-Version": version)
    186   }
    187 }
    188 
    189 task acceptanceTest(type: JavaExec) {
    190   mustRunAfter test
    191   onlyIf { dependsOnTaskDidWork() }
    192   classpath = standaloneJar.outputs.files
    193   main "fitnesseMain.FitNesseMain"
    194   args "-o", "-c", "FitNesse.SuiteAcceptanceTests?suite&format=text"
    195 }
    196 
    197 check.dependsOn acceptanceTest
    198 
    199 task javadocJar(type: Jar) {
    200   mustRunAfter check
    201   classifier = 'javadoc'
    202   from javadoc
    203 }
    204 
    205 task sourcesJar(type: Jar) {
    206   mustRunAfter check
    207   classifier = 'sources'
    208   from sourceSets.main.allSource
    209 }
    210 
    211 clean{
    212   delete "lib"
    213 }
    214 
    215 publishing {
    216   publications {
    217     FitNesseRelease(MavenPublication) {
    218       from components.java
    219       artifact sourcesJar
    220       artifact javadocJar
    221       artifact standaloneJar
    222       groupId 'org.fitnesse'
    223       artifactId 'fitnesse'
    224       pom.withXml {
    225         asNode().get('version') + { url('http://fitnesse.org') }
    226         asNode().appendNode('description', 'The fully integrated standalone wiki, and acceptance testing framework.')
    227         asNode().append(pomLicenses())
    228         asNode().append(pomScm())
    229         asNode().append(pomDevelopers())
    230 
    231         // Clean up scope entries added by the pom generator:
    232         asNode().dependencies.'*'.findAll() {
    233           if (it.scope.text() == 'runtime') {
    234             it.remove(it.scope)
    235           }
    236         }
    237       }
    238     }
    239   }
    240 }
    241 
    242 bintray {
    243   user = System.getenv("BINTRAY_USER") ?: 'Define your Bintray user name in BINTRAY_USER'
    244   key = System.getenv("BINTRAY_API_KEY") ?: 'Define your Bintray BINTRAY_API_KEY'
    245   publications = ['FitNesseRelease']
    246   publish = true
    247   pkg {
    248     repo = System.getenv("BINTRAY_API_KEY") ?: 'edge'
    249     name = 'fitnesse'
    250     userOrg = 'fitnesse'
    251     licenses = ['CPL-1.0']
    252     websiteUrl = 'http://fitnesse.org'
    253     vcsUrl = 'https://github.com/unclebob/fitnesse.git'
    254     publicDownloadNumbers = true
    255     githubRepo = 'unclebob/fitnesse'
    256     version {
    257       name = project.version
    258       desc = "FitNesse release ${project.version}"
    259       vcsTag = project.version
    260       gpg {
    261         sign = true
    262       }
    263     }
    264   }
    265 }
    266 
    267 wrapper {
    268   gradleVersion = '2.13'
    269 }
    270 
    271 def pomLicenses() {
    272   new NodeBuilder().licenses {
    273     license {
    274       name 'Common Public License version 1.0'
    275       url 'http://www.opensource.org/licenses/cpl1.0'
    276       distribution 'repo'
    277     }
    278   }
    279 }
    280 
    281 def pomScm() {
    282   new NodeBuilder().scm {
    283     connection 'scm:git:git://github.com/unclebob/fitnesse.git'
    284     developerConnection 'scm:git:git@github.com:unclebob/fitnesse.git'
    285     url 'scm:git:http://github.com/unclebob/fitnesse'
    286   }
    287 }
    288 
    289 def pomDevelopers() {
    290   new NodeBuilder().developers {
    291     developer {
    292       id 'unclebob'
    293       name 'Robert C. Martin'
    294       email 'unclebob@cleancoder.com'
    295     }
    296   }
    297 }

    上面代码中compileOnly files('lib/joda-time-2.3.jar')就是加入第三方jar的方法。

  • 相关阅读:
    BZOJ 3910: 火车
    POJ 1436.Horizontally Visible Segments-线段树(区间更新、端点放大2倍)
    洛谷 P3380 【模板】二逼平衡树(树套树)-线段树套splay
    计蒜客 38228. Max answer-线段树维护单调栈(The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer 南昌邀请赛网络赛) 2019ICPC南昌邀请赛网络赛
    CODEVS 4655 序列终结者-splay(区间更新、区间翻转、区间最值)
    计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational J. 2019ICPC南昌邀请赛网络赛)
    洛谷 P2042 [NOI2005]维护数列-Splay(插入 删除 修改 翻转 求和 最大的子序列)
    牛客网 桂林电子科技大学第三届ACM程序设计竞赛 G.路径-带条件的树的直径变形-边权最大,边数偶数的树上的最长路径-树形dp
    牛客网 桂林电子科技大学第三届ACM程序设计竞赛 D.寻找-树上LCA(树上a到b的路径上离c最近的点)
    牛客网 桂林电子科技大学第三届ACM程序设计竞赛 C.二元-K个二元组最小值和最大-优先队列+贪心(思维)
  • 原文地址:https://www.cnblogs.com/moonpool/p/5765307.html
Copyright © 2011-2022 走看看