apply plugin: "eclipse"
apply plugin: "java"
apply plugin: 'maven-publish'

ext {
	npVersion                    = "1.0.+"
	npAuthzVersion               = npVersion
	npAuthzImplVersion           = npVersion
	npAuthzRejectImplVersion     = npVersion
	npBlobVersion                = npVersion
	npCacheVersion               = npVersion
	npCoreVersion                = npVersion
	npCoreSupportVersion         = npVersion
	npDefinitionVersion          = npVersion
	npLibVersion                 = npVersion
	npSqlVersion                 = npVersion
	npSqlSpringVersion           = npVersion
	npTenantVersion              = "1.1.+"
	npUserVersion                = npVersion
	npUserImplVersion            = npVersion

	aminoVersion                 = "2.2.+"
	bap2Version                  = "2.2.+"
	inzVersion                   = "1.0.+"

	springVersion                = "5.1.4.RELEASE"
	springBootVersion            = "2.1.2.RELEASE"
	springSecurityVersion        = "5.1.3.RELEASE"
	springSessionVersion         = "2.1.3.RELEASE"
	springDataVersion            = "2.1.3.RELEASE"
    springRabbitVersion          = "2.1.3.RELEASE"
	
	liquibaseVersion             = "3.6.3"
	hibernateVersion             = "5.3.4.Final"
	beecodeHibernateVersion      = "5.3.4.Final"
	hikariVersion                = "3.2.0"
	druidVersion                 = "1.1.10"
	c3p0Version                  = "0.9.5.2"

	commonsFileUploadVersion     = "1.3.3"
	commonsIoVersion		     = "2.6"
	dom4jVersion                 = "2.1.0"
	jacksonVersion               = "2.9.5"
	javaServletVersion           = "4.0.0"
	jsonVersion                  = "20160810"
	httpclientVersion            = "4.5.3"
	httpcoreVersion              = "4.4.6"

	rhinoVersion                 = "1.7.7.1"

	slf4jVersion                 = "1.7.25"
	logbackVersion               = "1.2.3"

	junit5JupiterVersion         = "5.2.0"
	junit5PlatformVersion        = "1.2.0"
	junit5VintageVersion         = "5.2.0"
	mockitoVersion               = "2.17.0"

	mysqlVersion                 = "5.1.39"
	h2Version                    = "1.4.193"

	thymeleafExtrasVersion       = "2.1.3.RELEASE"
	
	poiVersion               = "3.16"
	poiOoxml                 = "3.16"
	poiOoxmlSchemas          = "3.16"
	micrometerRegistryVersion   = "1.0.4"
	poiTlVersion                = "1.5.0"
	cxfVersion               = "3.1.6"
	lib = [
		/* jiuqi next platform */
		np_authz:                     "com.jiuqi:np.authz:${npAuthzVersion}",
		np_authz_impl:                "com.jiuqi:np.authz.impl:${npAuthzImplVersion}",
		np_authz_reject_impl:         "com.jiuqi:np.authz.reject.impl:${npAuthzRejectImplVersion}",
		np_blob:                      "com.jiuqi:np.blob:${npBlobVersion}",
		np_cache:                     "com.jiuqi:np.cache:${npCacheVersion}",
		np_core:                      "com.jiuqi:np.core:${npCoreVersion}",
		np_core_support:              "com.jiuqi:np.core.support:${npCoreSupportVersion}",
		np_definition:                "com.jiuqi:np.definition:${npDefinitionVersion}",
		np_lib:                       "com.jiuqi:np.lib:${npSqlVersion}",
		np_sql:                       "com.jiuqi:np.sql:${npSqlVersion}",
		np_sql_spring:                "com.jiuqi:np.sql.spring:${npSqlSpringVersion}",
		np_tenant:                    "com.jiuqi:np.tenant:${npTenantVersion}",
		np_user:                      "com.jiuqi:np.user:${npUserVersion}",
		np_user_impl:                 "com.jiuqi:np.user:${npUserImplVersion}",

		/* amino & bcp */
		amino_amqp:                   "com.beecode:amino.amqp:${aminoVersion}",
		amino_boot:                   "com.beecode:amino.boot:${aminoVersion}",
		amino_boot_web:               "com.beecode:amino.boot.web:${aminoVersion}",
		amino_common:                 "com.beecode:amino.common:${aminoVersion}",
		amino_core:                   "com.beecode:amino.core:${aminoVersion}",
		amino_shell:                  "com.beecode:amino.shell:${aminoVersion}",
		amino_tenant:                 "com.beecode:amino.tenant:${aminoVersion}",
		amino_tenant_liquibase:       "com.beecode:amino.tenant.liquibase:${aminoVersion}",
		bcp_authc:                    "com.beecode:bcp.authc:${aminoVersion}",
		bcp_authc_passwd:             "com.beecode:bcp.authc.passwd:${aminoVersion}",
		bcp_authz:                    "com.beecode:bcp.authz:${aminoVersion}",
		bcp_base:                     "com.beecode:bcp.base:${aminoVersion}",
		bcp_biz:                      "com.beecode:bcp.biz:${aminoVersion}",
		bcp_config:                   "com.beecode:bcp.config:${aminoVersion}",
		bcp_core:                     "com.beecode:bcp.core:${aminoVersion}",
		bcp_dict:                     "com.beecode:bcp.dict:${aminoVersion}",
		bcp_group:                    "com.beecode:bcp.group:${aminoVersion}",
		bcp_import:                   "com.beecode:bcp.import:${aminoVersion}",
		bcp_job:                      "com.beecode:bcp.job:${aminoVersion}",
		bcp_limitation:               "com.beecode:bcp.limitation:${aminoVersion}",
		bcp_log:                      "com.beecode:bcp.log:${aminoVersion}",
		bcp_org:                      "com.beecode:bcp.org:${aminoVersion}",
		bcp_participant:              "com.beecode:bcp.participant:${aminoVersion}",
		bcp_print:					  "com.beecode:bcp.print:${aminoVersion}",
		bcp_query:                    "com.beecode:bcp.query:${aminoVersion}",
		bcp_query_template:           "com.beecode:bcp.query-template:${aminoVersion}",
		bcp_script:                   "com.beecode:bcp.script:${aminoVersion}",
		bcp_selector:                 "com.beecode:bcp.selector:${aminoVersion}",
		bcp_sequence:                 "com.beecode:bcp.sequence:${aminoVersion}",
		bcp_serial:                   "com.beecode:bcp.serial:${aminoVersion}",
		bcp_store:                    "com.beecode:bcp.store:${aminoVersion}",
		bcp_task:                     "com.beecode:bcp.task:${aminoVersion}",
		bcp_type:                     "com.beecode:bcp.type:${aminoVersion}",
		bcp_type_support_javascript:  "com.beecode:bcp.type.support.javascript:${aminoVersion}",
		bcp_type_support_json:        "com.beecode:bcp.type.support.json:${aminoVersion}",
		bcp_user:                     "com.beecode:bcp.user:${aminoVersion}",
		bcp_workflow:                 "com.beecode:bcp.workflow:${aminoVersion}",
		bcp_workflow_task:            "com.beecode:bcp.workflow.task:${aminoVersion}",
		
		/*bap2*/
		bap2_attachment: 			  "com.beecode:bap2.attachment:${bap2Version}",
		bap2_authz:					  "com.beecode:bap2.authz:${bap2Version}",
		bap2_bill:					  "com.beecode:bap2.bill:${bap2Version}",
		bap2_bill_redis:			  "com.beecode:bap2.bill.redis:${bap2Version}",
		bap2_biztrait: 			      "com.beecode:bap2.biztrait:${bap2Version}",
		bap2_commment: 			      "com.beecode:bap2.commment:${bap2Version}",
		bap2_common: 			      "com.beecode:bap2.common:${bap2Version}",
		bap2_core: 			          "com.beecode:bap2.core:${bap2Version}",
		bap2_department: 			  "com.beecode:bap2.department:${bap2Version}",
		bap2_export: 			      "com.beecode:bap2.export:${bap2Version}",
		bap2_functree: 			      "com.beecode:bap2.functree:${bap2Version}",
		bap2_limitation: 			  "com.beecode:bap2.limitation:${bap2Version}",
		bap2_log:					  "com.beecode:bap2.log:${bap2Version}",
		bap2_news:					  "com.beecode:bap2.news:${bap2Version}",
		bap2_org:					  "com.beecode:bap2.org:${bap2Version}",
		bap2_participant:			  "com.beecode:bap2.participant:${bap2Version}",
		bap2_query:					  "com.beecode:bap2.query:${bap2Version}",
		bap2_question:				  "com.beecode:bap2.question:${bap2Version}",
		bap2_scheduler:				  "com.beecode:bap2.scheduler:${bap2Version}",
		bap2_staff:                   "com.beecode:bap2.staff:${bap2Version}",
		bap2_sysconfig: 			  "com.beecode:bap2.sysconfig:${bap2Version}",
		bap2_system: 		 		  "com.beecode:bap2.system:${bap2Version}",
		bap2_user: 		 		      "com.beecode:bap2.user:${bap2Version}",
		bap2_userprofile: 		 	  "com.beecode:bap2.userprofile:${bap2Version}",
		bap2_workflow: 		 		  "com.beecode:bap2.workflow:${bap2Version}",
        bap2_bill_workflow:           "com.beecode:bap2.bill.workflow:${bap2Version}",
		
		/* springframework */
		spring_aop:                   "org.springframework:spring-aop:${springVersion}",
		spring_beans:                 "org.springframework:spring-beans:${springVersion}",
		spring_context:               "org.springframework:spring-context:${springVersion}",
		spring_context_support:       "org.springframework:spring-context-support:${springVersion}",
		spring_core:                  "org.springframework:spring-core:${springVersion}",
		spring_expression:            "org.springframework:spring-expression:${springVersion}",
		spring_jdbc:                  "org.springframework:spring-jdbc:${springVersion}",
		spring_orm:                   "org.springframework:spring-orm:${springVersion}",
		spring_oxm:                   "org.springframework:spring-oxm:${springVersion}",
		spring_tx:                    "org.springframework:spring-tx:${springVersion}",
		spring_web:                   "org.springframework:spring-web:${springVersion}",
		spring_webmvc:                "org.springframework:spring-webmvc:${springVersion}",
		
		/* springboot */
		spring_boot:                         "org.springframework.boot:spring-boot:${springBootVersion}",
		spring_boot_autoconfigure:           "org.springframework.boot:spring-boot-autoconfigure:${springBootVersion}",
		spring_boot_starter_amqp:            "org.springframework.boot:spring-boot-starter-amqp:${springBootVersion}",
		spring_boot_starter_aop:             "org.springframework.boot:spring-boot-starter-aop:${springBootVersion}",
		spring_boot_starter_data_redis:      "org.springframework.boot:spring-boot-starter-data-redis:${springBootVersion}",
		spring_boot_starter_jdbc:			 "org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}",
		spring_boot_starter_security:		 "org.springframework.boot:spring-boot-starter-security:${springBootVersion}",
		spring_boot_starter_test:            "org.springframework.boot:spring-boot-starter-test:${springBootVersion}",
		spring_boot_starter_tomcat:          "org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}",
		spring_boot_starter_web:             "org.springframework.boot:spring-boot-starter-web:${springBootVersion}",
		spring_boot_starter_web_service:     "org.springframework.boot:spring-boot-starter-web-services:${springBootVersion}",
		/* spring security */
		spring_security_core:         "org.springframework.security:spring-security-core:${springSecurityVersion}",
		spring_security_config:       "org.springframework.security:spring-security-config:${springSecurityVersion}",
		spring_security_web:          "org.springframework.security:spring-security-web:${springSecurityVersion}",
		
		/* spring session */
		spring_session_core:         "org.springframework.session:spring-session-core:${springSessionVersion}",
		spring_session_redis:        "org.springframework.session:spring-session-data-redis:${springSessionVersion}",
		
		/* spring data */
		spring_data:         "org.springframework.data:spring-data-redis:${springDataVersion}",
                
        /* spring rabbit */
        spring_rabbit:                "org.springframework.amqp:spring-rabbit:${springRabbitVersion}",

		/* hibernate */
		hibernate_core:               "com.beecode:hibernate-core:${beecodeHibernateVersion}",
		hibernate_c3p0:               "org.hibernate:hibernate-c3p0:${hibernateVersion}",

		/* connection pool */
		druid:                        "com.alibaba:druid:${druidVersion}",
		hikari:                       "com.zaxxer:HikariCP:${hikariVersion}",
		c3p0:                         "com.mchange:c3p0:${c3p0Version}",

		/* db */
		mysql_connector:              "mysql:mysql-connector-java:${mysqlVersion}",
		liquibase:                    "org.liquibase:liquibase-core:${liquibaseVersion}",
		h2:                           "com.h2database:h2:${h2Version}",

		/* libs */
		commons_fileupload:           "commons-fileupload:commons-fileupload:${commonsFileUploadVersion}",
		commons_io:                   "commons-io:commons-io:${commonsIoVersion}",
		dom4j:                        "org.dom4j:dom4j:${dom4jVersion}",
		jackson_databind:             "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}",
		jackson_datatype_jdk8:        "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jacksonVersion}",
		jackson_datatype_jsr310:      "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}",
		javax_servlet_api:            "javax.servlet:javax.servlet-api:${javaServletVersion}",
		json:                         "org.json:json:${jsonVersion}",
		httpclient:                   "org.apache.httpcomponents:httpclient:${httpclientVersion}",
		httpcore:                     "org.apache.httpcomponents:httpcore:${httpcoreVersion}",
		rhino:                        "org.mozilla:rhino:${rhinoVersion}",
		thymeleaf_extras:			  "org.thymeleaf.extras:thymeleaf-extras-springsecurity4:${thymeleafExtrasVersion}",
	
		/* log */
		slf4j_api:                    "org.slf4j:slf4j-api:${slf4jVersion}",
		logback_classic:              "ch.qos.logback:logback-classic:${logbackVersion}",

		/* testing */
		junit5_jupiter_api:           "org.junit.jupiter:junit-jupiter-api:${junit5JupiterVersion}",
		junit5_jupiter_engine:        "org.junit.jupiter:junit-jupiter-engine:${junit5JupiterVersion}",
		junit5_platform_launcher:     "org.junit.platform:junit-platform-launcher:${junit5PlatformVersion}",
		junit5_platform_runner:       "org.junit.platform:junit-platform-runner:${junit5PlatformVersion}",
		junit5_vintage_engine:        "org.junit.vintage:junit-vintage-engine:${junit5VintageVersion}",
		mockito_core:                 "org.mockito:mockito-core:${mockitoVersion}",
		mockito_junit_jupiter:        "org.mockito:mockito-junit-jupiter:${mockitoVersion}",
		
		poi:                          "org.apache.poi:poi:${poiVersion}",
		poi_ooxml:                    "org.apache.poi:poi-ooxml:${poiOoxml}",
		poi_ooxml_schemas:            "org.apache.poi:poi-ooxml-schemas:${poiOoxmlSchemas}",


		cxf_rt_frontend_jaxws:        "org.apache.cxf:cxf-rt-frontend-jaxws:${cxfVersion}",
		cxf_rt_transports_http:        "org.apache.cxf:cxf-rt-transports-http:${cxfVersion}",
		
		com_deepoove_poi_tl:          "com.deepoove:poi-tl:${poiTlVersion}",
        micrometer_registry_influx:   "io.micrometer:micrometer-registry-influx:${micrometerRegistryVersion}",
        
        javax_persistence_api:        "javax.persistence:javax.persistence-api:2.2",
        jboss_javax_transaction_api:  "org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final",
        hibernate_common_annotations: "org.hibernate.common:hibernate-commons-annotations:5.0.4.Final",
		net_byte_buddy:               "net.bytebuddy:byte-buddy:1.8.15"


	]
}

configurations.all {
	resolutionStrategy {
		/* jiuqi next platform */
		force lib.np_authz
		force lib.np_authz_impl
		force lib.np_authz_reject_impl
		force lib.np_blob
		force lib.np_cache
		force lib.np_core
		force lib.np_core_support
		force lib.np_definition
		force lib.np_lib
		force lib.np_sql
		force lib.np_sql_spring
		force lib.np_tenant
		force lib.np_user
		force lib.np_user_impl

		/* amino & bcp */
		force lib.amino_amqp
		force lib.amino_boot
		force lib.amino_boot_web
		force lib.amino_common
		force lib.amino_core
		force lib.amino_shell
		force lib.amino_tenant
		force lib.amino_tenant_liquibase
		force lib.bcp_authc
		force lib.bcp_authc_passwd
		force lib.bcp_authz
		force lib.bcp_base
		force lib.bcp_biz
		force lib.bcp_config
		force lib.bcp_dict
		force lib.bcp_import
		force lib.bcp_job
		force lib.bcp_limitation
		force lib.bcp_log
		force lib.bcp_org
		force lib.bcp_participant
		force lib.bcp_print
		force lib.bcp_query
		force lib.bcp_query_template
		force lib.bcp_script
		force lib.bcp_selector
		force lib.bcp_sequence
		force lib.bcp_serial
		force lib.bcp_store
		force lib.bcp_task
		force lib.bcp_type
		force lib.bcp_type_support_javascript
		force lib.bcp_type_support_json
		force lib.bcp_user
		force lib.bcp_workflow
		force lib.bcp_workflow_task

		/*bap2*/
		force lib.bap2_attachment
		force lib.bap2_functree
		force lib.bap2_core
		force lib.bap2_limitation
		force lib.bap2_sysconfig
		force lib.bap2_system

		/* springframework */
		force lib.spring_aop
		force lib.spring_beans
		force lib.spring_context
		force lib.spring_context_support
		force lib.spring_core
		force lib.spring_expression
		force lib.spring_jdbc
		force lib.spring_orm
		force lib.spring_oxm
		force lib.spring_tx
		force lib.spring_web
		force lib.spring_webmvc

		/* springboot */
		force lib.spring_boot
		force lib.spring_boot_autoconfigure
		force lib.spring_boot_starter_amqp
		force lib.spring_boot_starter_data_redis
		force lib.spring_boot_starter_jdbc
		force lib.spring_boot_starter_security
		force lib.spring_boot_starter_test
		force lib.spring_boot_starter_tomcat
		force lib.spring_boot_starter_web

		/* spring security */
		force lib.spring_security_core
		force lib.spring_security_config
		force lib.spring_security_web
		
		/* spring session */
		force lib.spring_session_core
		force lib.spring_session_redis
		
		/* spring data */
		force lib.spring_data
		force lib.spring_rabbit

		/* hibernate */
		force lib.hibernate_core
		force lib.hibernate_c3p0

		/* connection pool */
		force lib.druid
		force lib.hikari
		force lib.c3p0

		/* db */
		force lib.mysql_connector
		force lib.liquibase
		force lib.h2

		/* libs */
		force lib.commons_fileupload
		force lib.commons_io
		force lib.dom4j
		force lib.jackson_databind
		force lib.jackson_datatype_jdk8
		force lib.jackson_datatype_jsr310
		force lib.javax_servlet_api
		force lib.json
		force lib.rhino
		force lib.thymeleaf_extras
		
		force lib.javax_persistence_api
		force lib.jboss_javax_transaction_api
		force lib.hibernate_common_annotations
		

		/* log */
		force lib.slf4j_api
		force lib.logback_classic

		/* testing */
		force lib.junit5_jupiter_api
		force lib.junit5_jupiter_engine
		force lib.junit5_platform_launcher
		force lib.junit5_platform_runner
		force lib.junit5_vintage_engine
		force lib.mockito_core
		force lib.mockito_junit_jupiter
		
		force lib.poi
		force lib.poi_ooxml
		force lib.poi_ooxml_schemas


		force lib.javax_persistence_api
		force lib.hibernate_common_annotations
		force lib.jboss_javax_transaction_api
		force lib.net_byte_buddy

		exclude group: "c3p0", module: "c3p0"
		exclude group: "dom4j", module: "dom4j"
		exclude group: "com.vaadin.external.google", module: "android-json"
		exclude group: "org.slf4j", module: "slf4j-log4j12"
		exclude group: "org.hibernate", module: "hibernate-core"
		exclude group: "com.zaxxer", module: "HikariCP-java7"
	}
}

compileJava.options*.compilerArgs = [
	"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
	"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
	"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
	"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
	"-Xlint:unchecked", "-Xlint:-options","-Werror"
]

compileTestJava.options*.compilerArgs = [
	"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
	"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
	"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
	"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
	"-Xlint:-unchecked", "-Xlint:-options","-Werror"
]

compileJava {
	sourceCompatibility = 1.8
	targetCompatibility = 1.8
	options.encoding = 'UTF-8'
}

compileTestJava {
	sourceCompatibility = 1.8
	targetCompatibility = 1.8
	options.encoding = 'UTF-8'
	options.compilerArgs += "-parameters"
}

test {
	systemProperty("java.awt.headless", "true")
}

dependencies {
	compile lib.slf4j_api
	compile lib.logback_classic

	testCompile lib.junit5_jupiter_api
	testCompile lib.junit5_platform_runner
	testCompile lib.mockito_core
	testCompile lib.mockito_junit_jupiter
	testCompile lib.h2
	testCompile lib.logback_classic

	testRuntime lib.junit5_jupiter_engine
	testRuntime lib.junit5_platform_launcher
	testRuntime lib.junit5_vintage_engine

	testCompile lib.spring_boot_starter_test
}