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

完整的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)));

	}

}
时间: 2024-10-24 08:33:49

如何在 Gradle 中运行 Groovy 的 主类以及测试类的相关文章

[转帖]如何在VirtualBox中运行macOS Catalina Beta版本

如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/system/208917.html 晚上尝试一下. 本内容是关于如何在Linux上的VirtualBox中运行macOS Catalina Beta版的简短指南. 在开始之前你需要做以下准备: Linux x86_64(我使用的是Mint 19.1)英特尔酷睿CPU,不少于8 GB的内存和一个不错

如何在CocosCodeIDE中运行学习js-tests

我想对于每个Cocos2d游戏开发者来说,js-tests一直都是学习和参考的宝贵资源,也是最权威的指导教程.而,我们知道,CocosCodeIDE是官方推荐的一款强有力的IDE,其功能之强大,之便捷是其他IDE所无法比拟的.那么如何将二者组合在一起,为我们的学习提供帮助呢?本篇博客将带你走进他们的世界. 一.了解CocosCodeIDE和js-tests CocosCodeIDE:官网推出的一款强大的IDE,基于Eclipse改制而成.其主要特色在于两个方面: 便捷实用: CocosCodeI

如何在linux中运行sql文件

1.在linux中进入sql命令行 mysql -u root -p   输入密码 2.假设home下面有a.sql文件 先得use databasename,要不会报错 “No Database Selected” 然后source /home/a.sql 记得home前面要有 / 要不会报错 不能打开这个文件的. ---------------------------------------- 还有一个更好的方法: 使用navicat来连接linux下的mysql数据库 然后再navicat

如何在android中运行C语言程序

问题阐述: 本人使用mini6410开发了一个sqlite数据库的程序,在mini6410的linux系统下已经能够成功运行了.因为Android使用的也是linux内核,所以我想当然的认为按照同样的方法将程序移植到mini6410的android系统中也可以成功运行,但是当我运行程序的时候却提示我不能找到可执行文件(xlisten-arm是交叉编译出来的可执行文件): / # ./xlisten-arm/system/bin/sh: ./xlisten-arm: not found 1.探索:

模拟Spring如何在WEB中运行

Spring在web中配置和普通的Java程序中有所区别,总结一下主要表现在以下几个方面: ①jar包不同,需要引入两个web的jar包 ②需要考虑IOC容器创建的时间 非 WEB 应用在 main 方法中直接创建 在web应用中为了保证spring的运行,所以必须在程序刚在容器中启动时就必须创建IOC容器,这样的时间人为不好把握,我们可以通过Listener来监听程序的运行,保证在刚开始时就创建,具体采用的是 创建一个实现ServletContextListener接口的类,并在重写的cont

如何在spring中运行多个schedulers quartz 实例

http://wzping.iteye.com/blog/468263 1.定义一个JOB <!-- 使用pojo来做job,指定pojo和method -->     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">         <property name="tar

如何在cmd中运行.py文件

C:\Users\mf>cd C:\Program Files\Python36C:\Program Files\Python36>python const.py 切换到.py文件所在目录

在apache中运行 cgi程序

cgi 就是网站中各种后台的程序,该程序可以通过网页运行,cgi可以通过C编写,也可以通过shell,python编写 如何在apache中运行各种cgi程序,例如shell perl等程序 1.在apache的主配置文件httpd.conf 中添加 Scriptalias /cgi  "/usr/local/httpd/cgi-bin/" 然后重启 httpd service httpd restart 2.准备一个cgi程序: vi /usr/local/httpd/cgi-bin

在sublime中运行python

最近sublime越来越火了,甚至大有赶超经典编辑器vim的趋势. 如何在sublime中运行python脚本呢? STEP 0.首先要到python官网下载安装python 推荐安装python3 STEP 1.安装插件 按ctrl+shift+p,在弹出的文本框中输入install package,回车.稍等就会弹出插件管理器(类似linux下的software center) STEP 2.安装如下插件: pylinter python PEP8 Autoformat python 3 S