文档章节

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

圣洁之子
 圣洁之子
发布于 2015/03/28 17:21
字数 727
阅读 1872
收藏 1
点赞 0
评论 19

完整的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
博文 228
码字总数 91273
作品 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是基于JVM构建工具的新一代版本。它从现有的构建工具如Ant和Maven中学到了很多东西,并且把它们的最优思想提升到更高层次。遵循基于约定的构建方式,Gradle可以用一种声明式的方式为你...

柳哥 ⋅ 2015/10/10 ⋅ 0

构建Gradle范例项目之构建Java项目

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

柳哥 ⋅ 2015/10/21 ⋅ 0

Gradle(入门)

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

mmythos ⋅ 2017/12/30 ⋅ 0

Gradle 从入门到精通

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

精通吹水 ⋅ 2016/03/08 ⋅ 9

Kotlin DSL详解

DSL简介 所谓DSL领域专用语言(Domain Specified Language/ DSL),其基本思想是“求专不求全”,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。总的...

mcy0425 ⋅ 01/12 ⋅ 0

Gradle从入门到实战 - Groovy基础

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

亭子happy ⋅ 06/13 ⋅ 0

Gradle学习(二十一)——用TestKit测试构建逻辑

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

lastsweetop ⋅ 03/10 ⋅ 0

大型Android项目的工程化之路:编译与构建

关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse@163.com与我交流。 文章目录 一 Gr...

郭孝星 ⋅ 2017/12/07 ⋅ 0

如何从 Gradle 运行 Groovy 以及 Groovy 单元测试

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 'ju......

圣洁之子 ⋅ 2015/03/28 ⋅ 0

Android studio 下的robotium自动化测试和持续集成

一、前言 Android Studio 是一个Android开发环境,基于IntelliJIDEA. 类似 Eclipse ADT,AndroidStudio 提供了集成的 Android 开发工具用于开发和调试。作为官方主推的开发环境和停止对其他开...

百度MTC ⋅ 2016/02/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud 微服务 (六) 服务通信 RestTemplate

壹 通信的方式主要有两种,Http 和 RPC SpringCloud使用的是Http方式通信, Dubbo的通信方式是RPC 记录学习SpringCloud的restful方式: RestTemplate (本篇)、Feign 贰 RestTemplate 类似 Http...

___大侠 ⋅ 3分钟前 ⋅ 0

React创建组件的三种方式

1.无状态函数式组建 无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。 无状态函数式组...

kimyeongnam ⋅ 10分钟前 ⋅ 0

react 判断实例类型

今天在写组件的时候想通过判断内部子元素不同而在父元素上应用不同的class,于是首先要解决的就是如何判断子元素的类型。 这里附上一个讲的很全面的文章: https://www.cnblogs.com/onepixel...

球球 ⋅ 16分钟前 ⋅ 0

Centos7备份数据到百度网盘

一、关于 有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百...

zctzl ⋅ 30分钟前 ⋅ 0

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 33分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 40分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 59分钟前 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部