How to make jar file include .class from test folder

I use gradle init to generate a JAVA application gradle project
the default build.gradle is

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/7.6.1/userguide/building_java_projects.html
 */

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use TestNG framework, also requires calling test.useTestNG() below
    testImplementation 'org.testng:testng:7.5'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:31.1-jre'
}

application {
    // Define the main class for the application.
    mainClass = 'com.sas.App'
}

tasks.named('test') {
    // Use TestNG for unit tests.
    useTestNG()
}

then I run gradle build
I open app.jar from build/libs folder, it only contains class file from “main” folder,

how to make it contains class file from “test” folder

please help me

You can add the compile test class files to the jar using:

tasks.named('jar') {
    from(sourceSets.test.output)
}

However, I have to wonder why you would want to do this? If you are trying to share test fixture/utility classes there are better ways of achieving that.

Thanks, @Chris_Dore. You highlight there are better ways of achieving the sharing of utility classes. Are you able to provide pointers as to how best to do this?

You should most probably use the java-test-fixtures plugin.

1 Like