Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 99 additions & 56 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,45 @@ apply plugin : 'maven-publish'
group = 'io.github.vantiv'
version = JAR_VERSION

ext.xjcGeneratedDir = "$buildDir/generated/sources/xjc/main/java"

// ---- Java toolchain + Java 17 baseline bytecode (runs on 17 through 21) ----
allprojects {
plugins.withId('java') {
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

// Use the Java 17 API surface to keep artifacts compatible with Java 17+ runtimes.
tasks.withType(JavaCompile).configureEach {
options.release = 17
}
}
}


repositories {
maven {
url "http://repo1.maven.org/maven2"
}
}

configurations {
all{
all {
resolutionStrategy {
}
}
functionalTestImplementation.extendsFrom testImplementation
functionalTestRuntimeOnly.extendsFrom runtimeOnly

certificationTestImplementation.extendsFrom functionalTestImplementation
certificationTestRuntimeOnly.extendsFrom functionalTestRuntimeOnly

generateJAXB.extendsFrom mainRuntime
}

sourceSets {
main{
java{
srcDirs += "$buildDir/generated"
srcDirs += xjcGeneratedDir
}
}
functionalTest {
Expand All @@ -47,25 +62,50 @@ sourceSets {
}
}

dependencies{

configurations.named('functionalTestImplementation') {
extendsFrom(configurations.testImplementation)
}

configurations.named('functionalTestRuntimeOnly') {
extendsFrom(configurations.runtimeOnly)
}

configurations.named('certificationTestImplementation') {
extendsFrom(configurations.functionalTestImplementation)
}

configurations.named('certificationTestRuntimeOnly') {
extendsFrom(configurations.functionalTestRuntimeOnly)
}


dependencies {

implementation group: 'com.jcraft', name: 'jsch', version: '0.1.55'
implementation group: 'com.sun.xml.bind', name: 'jaxb-core', version: '2.3.0'
implementation group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.4'
implementation group: 'commons-io', name: 'commons-io', version: '2.18.0'
implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
implementation group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.2.1'
implementation group: 'org.bouncycastle', name: 'bcpg-jdk18on', version: '1.78.1'
implementation group: 'org.bouncycastle', name: 'bcprov-ext-jdk15to18', version: '1.78'

testImplementation group: 'junit', name: 'junit', version: '4.13.2'
testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.11.0'
testImplementation 'org.slf4j:slf4j-nop:1.7.36'

generateJAXB group: 'com.sun.xml.bind', name: 'jaxb-xjc', version: '2.3.5'
implementation group: 'commons-io',name: 'commons-io',version: '2.18.0'
implementation group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.4.3'
implementation group: 'org.bouncycastle',name: 'bcpg-jdk18on',version: '1.80'
implementation group: 'org.bouncycastle',name: 'bcprov-jdk18on', version: '1.80'
api 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.5'
implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.6'
implementation 'org.slf4j:slf4j-simple:2.0.17'
testImplementation 'org.slf4j:slf4j-nop:2.0.17'

testImplementation group: 'junit',name: 'junit', version: '4.13.2'
testImplementation group: 'org.mockito',name: 'mockito-core',version: '5.17.0'




// JAXB XJC code generator (Jakarta JAXB 4.x)
generateJAXB group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: '4.0.5'
generateJAXB group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api', version: '4.0.5'
generateJAXB group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '4.0.6'

}

////////// PLUGIN CONFIGURATION //////////
//sourceCompatibility=1.7
////////// PLUGIN CONFIGURATION //////////

clean {
// temporary, we need to change the tests to generate output inside build folder
Expand All @@ -80,20 +120,29 @@ jar{
manifest {
attributes("Implementation-Title":"Cnp SDK For Java 1.5 and greater", "Implementation-Version":"${JAR_VERSION}","Implementation-Vendor":"Cnp&Co","Main-Class":"io.github.vantiv.sdk.Setup")
}
getDestinationDirectory().set(file("${DIST_DIR_15}/lib"))
// Produce a self-contained distributable jar for file-based consumers.
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA'

getDestinationDirectory().set(file("${DIST_DIR_21}/lib"))
getArchiveFileName().set("cnp-sdk-for-java-${JAR_VERSION}.jar")
}

task javadocJar(type:Jar){
dependsOn javadoc
getArchiveClassifier().set('javadoc')
getDestinationDirectory().set(file("$buildDir/kit/java15/doc"))
getDestinationDirectory().set(file("$buildDir/kit/java21/doc"))
from tasks.javadoc
}

test {
reports.junitXml.destination(file("$buildDir/test-results/unit"))
reports.html.destination(file("$buildDir/reports/tests/unit"))
reports {
junitXml.outputLocation = file("$buildDir/test-results/unit")
html.outputLocation = file("$buildDir/reports/tests/unit")
}
}

////////// CUSTOM TASKS ///////////
Expand All @@ -111,8 +160,8 @@ task processXsd (type: Copy) {
}

doLast {
ant.replaceregexp(file:"$xsdOutput/cnpTransaction_v${SCHEMA_VERSION}.xsd", match:"(attributeFormDefault=\"unqualified\")>", replace:"\\1 xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\" jaxb:version=\"2.0\">", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpCommon_v${SCHEMA_VERSION}.xsd", match:"(elementFormDefault=\"qualified\")>", replace:"\\1 xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\" jaxb:version=\"2.0\">", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpTransaction_v${SCHEMA_VERSION}.xsd", match:"(attributeFormDefault=\"unqualified\")>", replace:"\\1 xmlns:jaxb=\"https://jakarta.ee/xml/ns/jaxb\" jaxb:version=\"3.0\">", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpCommon_v${SCHEMA_VERSION}.xsd", match:"(elementFormDefault=\"qualified\")>", replace:"\\1 xmlns:jaxb=\"https://jakarta.ee/xml/ns/jaxb\" jaxb:version=\"3.0\">", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpTransaction_v${SCHEMA_VERSION}.xsd", match:"<xs:attribute name=\"id\" type=\"xp:string25Type\" use=\"required\"\\s*/>", replace:" <xs:attribute name=\"id\" type=\"xp:string25Type\" use=\"required\" />", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpTransaction_v${SCHEMA_VERSION}.xsd", match:"<xs:attribute name=\"id\" type=\"xp:stringMin1Max25CollapseWhiteSpaceType\" use=\"required\"\\s*/>", replace:" <xs:attribute name=\"id\" type=\"xp:stringMin1Max25CollapseWhiteSpaceType\" use=\"required\" />", byline:true)
ant.replaceregexp(file:"$xsdOutput/cnpTransaction_v${SCHEMA_VERSION}.xsd", match:"<xs:attribute name=\"customerId\" type=\"xp:customerIdType\" use=\"optional\"\\s*/>", replace:" <xs:attribute name=\"customerId\" type=\"xp:customerIdType\" use=\"optional\"/>", byline:true)
Expand Down Expand Up @@ -179,7 +228,7 @@ task generateJaxbClasses(dependsOn: processXsd) {
eclipseClasspath.dependsOn it

ext.bindingsFile = "src/main/xsd/bindings.xml"
ext.generatedDir = "${buildDir}/generated"
ext.generatedDir = xjcGeneratedDir

inputs.dir processXsd.xsdOutput
inputs.file bindingsFile
Expand All @@ -202,61 +251,55 @@ task testFunctional(type:Test, dependsOn: functionalTestClasses){
classpath = sourceSets.functionalTest.runtimeClasspath
mustRunAfter test
testClassesDirs = sourceSets.functionalTest.output.classesDirs
reports.junitXml.destination(file("$buildDir/test-results/functional"))
reports.html.destination(file("$buildDir/reports/tests/functional"))
reports {
junitXml.outputLocation = file("$buildDir/test-results/functional")
html.outputLocation = file("$buildDir/reports/tests/functional")
}
}

task testCertification(type:Test, dependsOn: certificationTestClasses){
check.dependsOn it
classpath = sourceSets.certificationTest.runtimeClasspath
mustRunAfter testFunctional
testClassesDirs = sourceSets.certificationTest.output.classesDirs
reports.junitXml.destination(file("$buildDir/test-results/certification"))
reports.html.destination(file("$buildDir/reports/tests/certification"))
reports {
junitXml.outputLocation = file("$buildDir/test-results/certification")
html.outputLocation = file("$buildDir/reports/tests/certification")
}
}

task copyJarToKit(type:Copy, dependsOn:[check,jar]){
from "${DIST_DIR_15}/lib/cnp-sdk-for-java-${JAR_VERSION}.jar"
from "${DIST_DIR_21}/lib/cnp-sdk-for-java-${JAR_VERSION}.jar"
from "LICENSE"
into KIT_DIR
}

task copyLibsToKit(type:Copy, dependsOn:check){
from configurations.runtimeClasspath.asFileTree.matching{
include '**/activation*'
include '**/jaxb-api*'
include '**/jaxb-impl*'
include '**/jsr173*'
include '**/commons-logging-1.1.1*'
include '**/commons-codec*'
include '**/fluent-hc*'
include '**/httpclient*'
include '**/httpcore*'
include '**/httpmime*'
include '**/jsch*'
include '**/commons-io*'
include '**/bcpg-jdk18on*'
include '**/bcprov-ext-jdk15to18*'
}

// Copy ALL resolved runtime jars (direct + transitive) so consumers using
// the kit never need to add dependencies manually.
// Covers: jsch, commons-io, httpclient5, httpcore5, httpcore5-h2, slf4j-api,
// bcpg-jdk18on, bcprov-jdk18on, jakarta.xml.bind-api, jaxb-runtime,
// jaxb-core, txw2, istack-commons-runtime, angus-activation,
// jakarta.activation-api — and any future transitive additions.
from configurations.runtimeClasspath
into KIT_DEPENDENCIES_DIR
}

task tarKit(type:Tar, dependsOn:[copyJarToKit, copyLibsToKit]){
compression = Compression.GZIP
getDestinationDirectory().set(file("$buildDir/kit"))
getArchiveFileName().set("cnp-sdk-for-java-${JAR_VERSION}.tar.gz")
from "$buildDir/kit/java15"
from "$buildDir/kit/java21"
}

task zipKit(type:Zip, dependsOn:[copyJarToKit, copyLibsToKit]){
getDestinationDirectory().set(file("$buildDir/kit"))
getArchiveFileName().set("cnp-sdk-for-java-${JAR_VERSION}.zip")
from "$buildDir/kit/java15"
from "$buildDir/kit/java21"
}

task kit(dependsOn:[tarKit, zipKit]){
if (JavaVersion.current().isJava8Compatible()) {
if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_21)) {
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
DIST_DIR_15=build/dist/java15
DIST_DIR_21=build/dist/java21
JAR_VERSION=12.49.0
KIT_DIR=build/kit/java15
KIT_DEPENDENCIES_DIR=build/kit/java15/dependencies
KIT_DIR=build/kit/java21
KIT_DEPENDENCIES_DIR=build/kit/java21/dependencies
OPENSFTP_DIR=lib/opensftp-0.3.0
SCHEMA_VERSION=12.49
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
14 changes: 7 additions & 7 deletions samples/auth/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,39 @@ repositories {
}
task execAuthExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.AuthExample'
mainClass = 'io.github.vantiv.sdk.samples.AuthExample'
classpath = sourceSets.main.runtimeClasspath


}
task execAuthReversalExample(type:JavaExec) {
check.dependsOn it
main='io.github.vantiv.sdk.samples.AuthReversalExample'
mainClass = 'io.github.vantiv.sdk.samples.AuthReversalExample'
classpath = sourceSets.main.runtimeClasspath
}
task execAuthWithTokenExample(type:JavaExec) {
check.dependsOn it
main='io.github.vantiv.sdk.samples.AuthWithTokenExample'
mainClass = 'io.github.vantiv.sdk.samples.AuthWithTokenExample'
classpath = sourceSets.main.runtimeClasspath

}
task execFullLifeCycleExample(type:JavaExec) {
check.dependsOn it
main='io.github.vantiv.sdk.samples.FullLifeCycleExample'
mainClass = 'io.github.vantiv.sdk.samples.FullLifeCycleExample'
classpath = sourceSets.main.runtimeClasspath
}
task execSampleDetailTax(type:JavaExec) {
check.dependsOn it
main='io.github.vantiv.sdk.samples.SampleDetailTax'
mainClass = 'io.github.vantiv.sdk.samples.SampleDetailTax'
classpath = sourceSets.main.runtimeClasspath
}
task execAuthExampleInterac(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.AuthExampleInterac'
mainClass = 'io.github.vantiv.sdk.samples.AuthExampleInterac'
classpath = sourceSets.main.runtimeClasspath
}
task execAuthExampleInterac1(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.AuthExampleInterac1'
mainClass = 'io.github.vantiv.sdk.samples.AuthExampleInterac1'
classpath = sourceSets.main.runtimeClasspath
}
2 changes: 1 addition & 1 deletion samples/batch/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ repositories {
}
task execSamples(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.MechaBatch'
mainClass = 'io.github.vantiv.sdk.samples.MechaBatch'
classpath = sourceSets.main.runtimeClasspath


Expand Down
8 changes: 4 additions & 4 deletions samples/capture/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ repositories {
}
task execCaptureExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.CaptureExample'
mainClass = 'io.github.vantiv.sdk.samples.CaptureExample'
classpath = sourceSets.main.runtimeClasspath
}

task execCaptureGivenAuthExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.CaptureGivenAuthExample'
mainClass = 'io.github.vantiv.sdk.samples.CaptureGivenAuthExample'
classpath = sourceSets.main.runtimeClasspath
}
task execCapturePartialExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.CapturePartialExample'
mainClass = 'io.github.vantiv.sdk.samples.CapturePartialExample'
classpath = sourceSets.main.runtimeClasspath
}
task execForceCaptureExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.ForceCaptureExample'
mainClass = 'io.github.vantiv.sdk.samples.ForceCaptureExample'
classpath = sourceSets.main.runtimeClasspath
}

Expand Down
2 changes: 1 addition & 1 deletion samples/credit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ repositories {
}
task execCreditExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.CreditExample'
mainClass = 'io.github.vantiv.sdk.samples.CreditExample'
classpath = sourceSets.main.runtimeClasspath
}

Expand Down
8 changes: 4 additions & 4 deletions samples/echeck/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ repositories {
}
task execEcheckCreditExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.EcheckCreditExample'
mainClass = 'io.github.vantiv.sdk.samples.EcheckCreditExample'
classpath = sourceSets.main.runtimeClasspath
}
task execEcheckRedepositExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.EcheckRedepositExample'
mainClass = 'io.github.vantiv.sdk.samples.EcheckRedepositExample'
classpath = sourceSets.main.runtimeClasspath
}
task execEcheckSaleExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.EcheckSaleExample'
mainClass = 'io.github.vantiv.sdk.samples.EcheckSaleExample'
classpath = sourceSets.main.runtimeClasspath
}

task execEcheckVerificationExample(type:JavaExec){
check.dependsOn it
main='io.github.vantiv.sdk.samples.EcheckVerificationExample'
mainClass = 'io.github.vantiv.sdk.samples.EcheckVerificationExample'
classpath = sourceSets.main.runtimeClasspath
}

Expand Down
Loading