文档章节

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

圣洁之子
 圣洁之子
发布于 2015/03/28 17:21
字数 727
阅读 1908
收藏 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
博文 313
码字总数 92996
作品 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(入门)

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

mmythos
2017/12/30
0
0
构建Gradle范例项目之构建Java项目

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

柳哥
2015/10/21
1K
0
Gradle之介绍

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

柳哥
2015/10/10
69
0
Gradle学习(二十一)——用TestKit测试构建逻辑

用法 想使用TestKit,需要在构建脚本中引入: gradleTestKit()方法包含TestKit的class文件,还有Gradle Api的客户端工具类,但是并不包含JUnit,TestNG等测试工具的类, 用GradleRunner进行功...

lastsweetop
03/10
0
0
Gradle 从入门到精通

Gradle 从入门到精通 Java 构建Gradle 逐渐出现在各个开源软件中,特别是Android平台。虽然工具无对错用的好即可,但是美帝亡我之心不死,从ANT(纯手动)到MAVEN(套餐模式)再到Gradle(半...

精通吹水
2016/03/08
1K
9

没有更多内容

加载失败,请刷新页面

加载更多

Linux学习-1031(rsync同步工具 上)

10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步 一、 rsync工具介绍 rsync是一个同步工具,在日常的运维中常会用到。它可以本地同步,也实现可以远程两台机器同步。...

wxy丶
3分钟前
0
0
python实战一期:第一天

1. 为什么学习python 1.1 为什么要学Python? Python第一是个非常牛B的脚本语言,能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的Web界面,只有当你自...

laoba
5分钟前
0
0
Java并发编程学习三:线程同步的关键字以及理解

上篇文章中介绍了Java线程的带来的问题与内存模型中介绍了线程可能会引发的问题以及对应Java的内存模型,顺带介绍了Volatile和Sychronized关键字。今天对Java中涉及到的常见的关键类和关键字...

JerryLin123
12分钟前
0
0
我用代码来给你们分析一个赚钱的技巧

赚钱是个俗气的话题,但又是人人都绕不开的事情。我今天来“科学”地触碰下这个话题。 谈赚钱,就会谈到理财、投资,谈到炒股。有这样一个笑话: 问:如何成为百万富翁? 答:带一千万进入股...

crossin
12分钟前
0
0
spring MatchingBean应用

1、编写接口FactoryList import java.util.List;public interface FactoryList<E extends MatchingBean<K>, K> extends List<E> { E getBean(K factor); List<E> getBeanLi......

重城重楼
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部