Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ commonsIOVersion=2.11.0
javaxVersion=2.2
jakartaVersion=3.1.0
jacoDbVersion=1.3.0
usvmVersion=1.0.0-competition

# use latest Java 8 compaitable Spring and Spring Boot versions
springVersion=5.3.28
Expand Down
3 changes: 0 additions & 3 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,3 @@ if (projectType == ultimateEdition) {
include("utbot-light")

//include("utbot-intellij-main")

// TODO usvm-sbft-merge: add if here if we want merge contest it into main
includeBuild("../usvm")
38 changes: 24 additions & 14 deletions utbot-analytics/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,27 @@ processResources {
}
}

jar {
dependsOn classes
manifest {
attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
}

dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}

duplicatesStrategy = DuplicatesStrategy.EXCLUDE
zip64 = true
}
// TODO if you need utbot-analytics fat jar, use shadow jar to create a SEPARATE task for a fat jar.
// Do not use main jar for a fat jar, because it breaks Gradle conflict resolution, here's how:
// 1. utbot-analytics depends on library A version 1.0 (and adds it to own main jar)
// 2. utbot-junit-contest depends on utbot-analytics and library A version 1.1
// 3. Both library A version 1.0 and version 1.1 end up on the classpath and it's a matter of chance which one is earlier
// If utbot-analytics were to only declare its dependency on library A version 1.0 and not force it by adding it to a
// main jar, then Gradle would be able to recognize the conflict of library A version 1.0 and version 1.1 and resolve
// it according to a conflict resolution strategy, which by default picks the latest version, which works in most cases.
// But if you put library A version 1.0 into some fat jar, Gradle will no longer be able to exclude it from the fat jar
// in favor of a newer version when it needs to resolve dependency conflicts.
//jar {
// dependsOn classes
// manifest {
// attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
// }
//
// dependsOn configurations.runtimeClasspath
// from {
// configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
// }
//
// duplicatesStrategy = DuplicatesStrategy.EXCLUDE
// zip64 = true
//}
72 changes: 69 additions & 3 deletions utbot-junit-contest/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,30 @@ plugins {
}
apply plugin: 'jacoco'

repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
maven {
url = uri('https://maven.pkg.github.com/UnitTestBot/usvm')
credentials {
// Generate token here -- https://github.com/settings/tokens/new (select `read:packages` checkbox)
username = "<github username>"// System.getenv("GITHUB_ACTOR")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is better to use gradle project properties https://docs.gradle.org/current/userguide/project_properties.html

password = "<github token>"// System.getenv("GITHUB_TOKEN")
}
}
}

configurations {
fetchInstrumentationJar
approximations
usvmApproximationsApi
usvmInstrumentationCollector
usvmInstrumentationRunner
}

def approximationsRepo = "com.github.UnitTestBot.java-stdlib-approximations"
def approximationsVersion = "53ceeb23ea"

compileJava {
options.compilerArgs << '-XDignore.symbol.file'
}
Expand Down Expand Up @@ -136,16 +156,19 @@ dependencies {
implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
implementation group: 'org.jsoup', name: 'jsoup', version: '1.6.2'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1'
implementation group: 'com.google.guava', name: 'guava', version: guavaVersion
// need for tests
implementation group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
implementation group: 'org.mockito', name: 'mockito-inline', version: mockitoInlineVersion
implementation 'junit:junit:4.13.2'

implementation "org.burningwave:core:12.62.7"

implementation('org.usvm:usvm-core')
implementation('org.usvm:usvm-jvm')
implementation('org.usvm:usvm-jvm-instrumentation')
implementation group: "org.usvm", name: "usvm-core", version: usvmVersion
implementation group: "org.usvm", name: "usvm-jvm", version: usvmVersion
implementation group: "org.usvm", name: "usvm-jvm-api", version: usvmVersion
implementation group: "org.usvm", name: "usvm-jvm-instrumentation", version: usvmVersion
implementation group: "org.usvm", name: "usvm-jvm-instrumentation-collectors", version: usvmVersion

implementation group: "org.jacodb", name: "jacodb-core", version: jacoDbVersion
implementation group: "org.jacodb", name: "jacodb-analysis", version: jacoDbVersion
Expand All @@ -160,6 +183,12 @@ dependencies {
testImplementation files('src/main/resources/evosuite/evosuite-standalone-runtime-1.2.0.jar')

fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')

approximations "$approximationsRepo:approximations:$approximationsVersion"
usvmApproximationsApi "org.usvm:usvm-jvm-api:$usvmVersion"
usvmInstrumentationCollector "org.usvm:usvm-jvm-instrumentation-collectors:$usvmVersion"
usvmInstrumentationRunner "org.usvm:usvm-jvm-instrumentation:$usvmVersion"
usvmInstrumentationRunner "org.usvm:usvm-jvm-instrumentation-collectors:$usvmVersion"
}

processResources {
Expand Down Expand Up @@ -214,3 +243,40 @@ task monitoringJar(type: Jar) {

duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

// TODO usvm-sbft-saloed: replace with runner from usvm (unavailable due to huge jar size)
task usvmInstrumentationRunnerJar(type: Jar) {
archiveBaseName = "usvm-instrumentation-runner"
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes(
"Main-Class": "org.usvm.instrumentation.rd.InstrumentedProcessKt",
"Premain-Class": "org.usvm.instrumentation.agent.Agent",
"Can-Retransform-Classes": "true",
"Can-Redefine-Classes": "true"
)
}

from {
configurations.usvmInstrumentationRunner.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}

task run(type: JavaExec) {
mainClass.set("org.utbot.contest.ContestEstimatorKt")
classpath = sourceSets.main.runtimeClasspath
workingDir = project.rootProject.projectDir

def usvmApproximationJarPath = configurations.approximations.resolve().iterator().next()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

configurations.approximations.resolvedConfiguration.files.find(). Note that find is used to retrieve the first element.

def usvmApproximationApiJarPath = configurations.usvmApproximationsApi.resolve().iterator().next()
environment "usvm.jvm.api.jar.path", usvmApproximationApiJarPath.absolutePath
environment "usvm.jvm.approximations.jar.path", usvmApproximationJarPath.absolutePath

def usvmInstrumentationCollectorJarPath = configurations.usvmInstrumentationCollector.resolve().iterator().next()
environment "usvm-jvm-collectors-jar", usvmInstrumentationCollectorJarPath.absolutePath

dependsOn(usvmInstrumentationRunnerJar)
environment "usvm-jvm-instrumentation-jar", usvmInstrumentationRunnerJar.outputs.files.singleFile
}