文档章节

如何在 Gradle 中运行 Groovy 的 主类以及测试类

圣洁之子
 圣洁之子
发布于 2015/03/28 17:21
字数 727
阅读 1922
收藏 1

完整的Gradle小项目:密码管理集中化


下面是配置范例 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.Node
import groovy.xml.XmlUtil

public 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.FileUtils
import groovy.util.AntBuilder
import groovy.xml.XmlUtil
import groovy.util.Node
import org.apache.commons.io.FileUtils



class MainTest {
	private obj = null

	static final String input = '''<beans xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <bean id="database" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=gbk"/>
    <property name="username" value="root"/>
    <property name="password" value="sa"/>
  </bean>
  <bean id="sybase" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=gbk"/>
    <property name="username" value="root"/>
    <property name="password" value="ind_suezssts"/>
  </bean>
</beans>
'''

	static final String target = '''<beans xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <bean id="database" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=gbk"/>
    <property name="username" value="root"/>
    <property name="password" value="${database_password}"/>
  </bean>
  <bean id="sybase" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=gbk"/>
    <property name="username" value="root"/>
    <property name="password" value="${sybase_password}"/>
  </bean>
</beans>
'''
	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)));

	}
	
	
	
}


© 著作权归作者所有

共有 人打赏支持
上一篇: 进程和线程
圣洁之子
粉丝 6
博文 330
码字总数 97588
作品 0
深圳
后端工程师
私信 提问
加载中

评论(19)

圣洁之子
圣洁之子

http://ask.39.net/question/27863324.html
圣洁之子
圣洁之子
http://zhidao.baidu.com/question/176865108.html
圣洁之子
圣洁之子
http://www.mmbang.com/shenzhen/bang/895674
深圳 染色体检查
圣洁之子
圣洁之子
http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
https://github.com/thebuzzmedia/imgscalr
http://www.codeyouneed.com/java-watermark-image/
圣洁之子
圣洁之子
http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
圣洁之子
圣洁之子
--------------------------------

Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
http://chenzhou123520.iteye.com/blog/1836987




Java操作PDF之iText超入门
http://blog.csdn.net/z69183787/article/details/17265495

http://stackoverflow.com/questions/23810048/extract-table-contents-from-pdf-in-java-itext-pdfbox
https://github.com/tabulapdf/tabula-java

http://olex.openlogic.com/packages/itext/2.1.7#package_detail_tabs


http://stackoverflow.com/questions/10878695/how-to-read-a-table-in-a-pdf-using-itext-java

http://zhuchengzzcc.iteye.com/blog/1603671
http://1006117458-qq-com.iteye.com/blog/1180584
http://stackoverflow.com/questions/4028240/extract-columns-of-text-from-a-pdf-file-using-itext
http://itextpdf.com/book/chapter.php?id=5


////////////////////////////
http://www.codeyouneed.com/java-watermark-image/

http://stackoverflow.com/questions/5459701/how-can-i-watermark-an-image-in-java

http://code.google.com/p/thumbnailator/


--------------------------------
圣洁之子
圣洁之子
http://www.120ask.com/tagcloud/H5FiN5nakqwFp25QakU55Os5FrU53wq.html
圣洁之子
圣洁之子
http://www.jk51.com/wenda-120R341022011.html
圣洁之子
圣洁之子
http://www.120ask.com/question/1484451.htm

圣洁之子
圣洁之子
http://www.120ask.com/tagcloud/H5FiN5nakqwFp25QakU55Os5FrU53wq.html

six-finger
构建Gradle范例项目之构建Java项目

Gradle插件通过引入特定领域的约定和任务来构建你的项目。Java插件是Gradle自身装载的一个插件。Java插件提供的基本功能远比源代码编译和打包多。它为你的项目建立了一个标准的项目布局,并确...

柳哥
2015/10/21
1K
0
Gradle(入门)

Gradle Gradle 自动测试 打包 Gradle插件 多语言编程 Gradle 安装配置 SDKMAN方式 先安装sdkman 使用Bash运行 即可安装 Chocolate windows 上安装 chocolate PowerShell中运行 若操作系统默认...

mmythos
2017/12/30
0
0
Gradle之介绍

Gradle是基于JVM构建工具的新一代版本。它从现有的构建工具如Ant和Maven中学到了很多东西,并且把它们的最优思想提升到更高层次。遵循基于约定的构建方式,Gradle可以用一种声明式的方式为你...

柳哥
2015/10/10
69
0
Groovy 现在可运行在 Android 系统上了!

在最近的GR8Conf Europe 2014期间,SpringSource/Pivotal的Groovy高级软件工程师 Cédric Champeau已经在Andriod上完成一次Groovy代码的现场pull请求的合并。 Groovy开发人员为了在Android上...

oschina
2014/06/08
9K
15
Gradle从入门到实战 - Groovy基础

前言 Android方向的第一期文章,会专注于Gradle系列,名字叫做『 Gradle从入门到实战』,计划有如下几个课程: Groovy基础 全面理解Gradle 如何创建Gradle插件 分析Android的build tools插件...

亭子happy
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java生成二维码图片

maven配置jar包 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.z......

骑羊放狼灬
6分钟前
2
0
oracle 修改字段类型

1.varchar2 类型修改 例子:alter table T_Node modify (NODE_CONTEXT varchar2(4000)); 2.varchar2 修改为clob 例子: alter table T_Node add hehe clob; update T_Node set hehe=NODE_CO......

qimh
9分钟前
2
0
别再写 bug 了,避免空指针的 5 个案例!

空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。 什么是空指针? 当一个变量...

Java技术栈
14分钟前
5
0
FastJson对BigDecimal保留两位小数(valueFilter)

实现ValueFilter public class BigDecimalValueFilter implements ValueFilter { @Override public Object process(Object o, String name, Object value) {//o是待转换的对象,n......

石日天
15分钟前
1
0
android 颜色透明度参照比

##透明度参照表: 00%=FF(不透明) 5%=F2 10%=E5 15%=D8 20%=CC 25%=BF 30%=B2 35%=A5 40%=99 45%=8c 50%=7F 55%=72 60%=66 65%=59 70%=4c 75%=3F 80%=33 85%=21 90%=19 95%=0c 100%=00(全透......

东街小霸王
16分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部