博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在 Gradle 中运行 Groovy 的 主类以及测试类
阅读量:6042 次
发布时间:2019-06-20

本文共 5032 字,大约阅读时间需要 16 分钟。

hot3.png

下面是配置范例 build.gradle:

apply plugin: 'groovy'repositories {	mavenLocal()    mavenCentral()}dependencies {    compile 'org.codehaus.groovy:groovy-all:2.3.7'	compile 'org.apache.ant:ant:1.9.4'    testCompile 'junit:junit:4.11'	testCompile 'commons-io:commons-io:2.2'}sourceSets {    main {        groovy {			srcDirs = ['./src/main/groovy']			include 'Main.groovy'        }    }    test {        groovy {            srcDirs = ['./src/test/groovy']        }    }}task runScript(type: JavaExec) {  description 'Run Groovy script'  // Set main property to name of Groovy script class.  main = 'Main'  // Set classpath for running the Groovy script.  classpath = sourceSets.main.runtimeClasspath}defaultTasks 'runScript'

Main.groovy

import groovy.util.Nodeimport groovy.xml.XmlUtilpublic class Main{	public static final String LINE_SEPARATOR = System.getProperty("line.separator")	boolean extractPassword(Node root, def map){		boolean update = false		String beanId 		String propertyName		for(def entry: map.entrySet()){			beanId = entry.key.split('_')[0]			propertyName = entry.key.split('_')[-1]			def node = root.find{ it."@id" == beanId }.find{ it."@name" == propertyName }			String password = node.attribute("value")			if( password ==~ /\$\{.*?\}/ ){				println "It's already a place-holder of Spring style. Skip."				continue			}			node."@value" = '${' + entry.key + '}'			entry.value = password			update = true			//println XmlUtil.serialize(node)				}		return update	}		void saveXml(String fileName, Node xml){		def writer = new FileWriter(fileName)		def printer = new XmlNodePrinter(new PrintWriter(writer))		printer.preserveWhitespace = true		printer.print(xml)			}		void saveSstsConfiguration(String fileName, def map){		File file = new File(fileName)		Properties props = new Properties()		file.withInputStream{ stream ->  		  props.load(stream)		   		}			boolean update = false		map.entrySet().each{ entry->			if(props[entry.key] == null){				if( !(entry.value ==~ /\$\{.*?\}/) ){					file.append(LINE_SEPARATOR + "${entry.key}=${entry.value}")					update = true				}			}		}		if(update){			file.append(LINE_SEPARATOR)		}	}		static main(args){		Main obj = new Main()			String fileName = "./src/main/resources/Spring-Config.xml"		def map = ["database_password":"", "sybase_password":""]		File file = new File(fileName)		Node root = new XmlParser().parseText(file.getText())		boolean update = obj.extractPassword(root, map)		if(update){			new AntBuilder().copy( file:fileName, tofile:fileName + "_Bak")			obj.saveXml(fileName, root)			String sstsConfiguration = "./src/main/resources/ssts.configuration"			new AntBuilder().copy( file:sstsConfiguration, tofile:sstsConfiguration + "_Bak")			obj.saveSstsConfiguration(sstsConfiguration, map)		}else{			println "No update and no replication."		}		println map		}}

MainTest.groovy

import org.junit.*import static org.junit.Assert.*import org.apache.commons.io.FileUtilsimport groovy.util.AntBuilderimport groovy.xml.XmlUtilimport groovy.util.Nodeimport org.apache.commons.io.FileUtilsclass MainTest {	private obj = null	static final String input = '''
  
    
    
    
    
    
    
    
    
    
  ''' static final String target = '''
  
    
    
    
    
    
    
    
    
    
  ''' static def map = null    static Node root  static Node xml @BeforeClass public static void enter(){ } @Before public void setUp(){ root = new XmlParser().parseText(input) xml = new XmlParser().parseText(target) obj = new Main() map = ["database_password":"", "sybase_password":""] } @Test public void extractPasswordReturnTrue(){ boolean result = obj.extractPassword(root, map) def mymap = ["database_password":"sa", "sybase_password":"ind_suezssts"] assertTrue result assertEquals mymap,map assertEquals XmlUtil.serialize(xml), XmlUtil.serialize(root) } @Test public void extractPasswordReturnFalse(){ Node myxml = new XmlParser().parseText(target) boolean result = obj.extractPassword(xml, map) def mymap = ["database_password":"", "sybase_password":""] assertFalse result assertEquals mymap,map assertEquals XmlUtil.serialize(myxml), XmlUtil.serialize(xml) } @Test public void saveXml(){ //String fileName, Node xml String fileName = "./src/test/resources/test-A.xml" new File(fileName).delete() obj.saveXml(fileName, xml) assertTrue new File(fileName).exists() Node myxml = new XmlParser().parseText(new File(fileName).getText()) assertEquals XmlUtil.serialize(myxml), XmlUtil.serialize(xml) } // void saveSstsConfiguration(String fileName, def map){ @Test public void saveSstsConfiguration(){ String fileName = "./src/test/resources/ssts.configuration.test" String fileTarget = "./src/test/resources/ssts.configuration.target" new File(fileName).write("") boolean result = obj.extractPassword(root, map) obj.saveSstsConfiguration(fileName, map) assertEquals(FileUtils.readLines(new File(fileName)), FileUtils.readLines(new File(fileTarget))); } }

转载于:https://my.oschina.net/u/553266/blog/393073

你可能感兴趣的文章
HP Designjet 800PS 日常维护
查看>>
rhel7使用fdisk分区时无法使用全部分区的解决办法
查看>>
Docker 清理命令
查看>>
利用NRPE外部构件监控远程主机
查看>>
使用模块化编译缩小 apk 体积
查看>>
router-link传参
查看>>
ios之UISlider
查看>>
短信验证流程
查看>>
php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
查看>>
OpenCV Error: Assertion failed (data0.dims <= 2 && type == 5 && K > 0) in cv::kmeans
查看>>
python string 之 format
查看>>
树形DP 复习
查看>>
Vuex随笔
查看>>
crontab 不执行
查看>>
避免用for循环写数据
查看>>
Dijkstra(变形) POJ 1797 Heavy Transportation
查看>>
关于Webpack详述系列文章 (第三篇)
查看>>
关于Webpack详述系列文章 (第四篇)
查看>>
分布式系统的面试题15
查看>>
个人代码库の创建快捷方式
查看>>