如何在 Gradle 中运行 Groovy 的 主类以及测试类
如何在 Gradle 中运行 Groovy 的 主类以及测试类
圣洁之子 发表于3年前
如何在 Gradle 中运行 Groovy 的 主类以及测试类
  • 发表于 3年前
  • 阅读 1862
  • 收藏 1
  • 点赞 0
  • 评论 19

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 如何在 Gradle 中运行 Groovy 的 主类以及测试类。附完整的Gradle示例项目地址。

完整的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
博文 213
码字总数 79718
评论 (19)
圣洁之子
http://groovy-lang.org/processing-xml.html
圣洁之子
http://www.hjenglish.com/new/p197841/page2/
圣洁之子
http://cjkeizai.j.people.com.cn/n/2013/0918/c368507-22965452.html
圣洁之子
7-26日飞翔户外与您相约红树林,唱歌,跳舞,游戏,踩单车
http://sz.ganji.com/huodong4/1642050001x.htm
圣洁之子
Caused by: org.apache.maven.wagon.authorization.AuthorizationException: Not authorized by proxy, ReasonPhrase:Proxy Authentication Required.
圣洁之子
http://www.cnblogs.com/yakov/archive/2011/11/26/maven2_settings.html
Maven2的配置文件settings.xml
圣洁之子
http://genesm15.imascientist.org.uk/2015/03/07/polydactyly-is-an-inherited-condition-due-to-a-dominant-allele-causing-extra-fingers-or-toes-what-is-the-chance-of-a/
圣洁之子
https://en.wikipedia.org/wiki/Polydactyly
圣洁之子
http://chenzhou123520.iteye.com/blog/1836987
圣洁之子
http://www.120ask.com/tagcloud/H5FiN5nakqwFp25QakU55Os5FrU53wq.html

six-finger
圣洁之子
http://www.120ask.com/question/1484451.htm

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

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.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
圣洁之子
http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
https://github.com/thebuzzmedia/imgscalr
http://www.codeyouneed.com/java-watermark-image/
圣洁之子
http://www.mmbang.com/shenzhen/bang/895674
深圳 染色体检查
圣洁之子
http://zhidao.baidu.com/question/176865108.html
圣洁之子

http://ask.39.net/question/27863324.html
×
圣洁之子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: