Moritz Halbritter 8670aabd80 Upgrade graalvm-reachability-metadata to 0.3.19
Closes gh-263
2025-04-15 08:43:49 +02:00
2025-01-17 11:03:14 +00:00
2024-02-29 07:52:01 +00:00
2025-04-14 09:31:16 +01:00
2024-09-25 08:04:40 +01:00
2024-09-25 08:04:40 +01:00
2022-07-04 17:01:00 +01:00

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
= Spring AOT Smoke Tests image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?search.rootProjectNames=spring-aot-smoke-tests"]

A suite of tests for applications using AOT on the JVM and in GraalVM native images.
There are two types of tests: unit tests and application tests.

Unit tests are processed ahead of time and are then either run on the JVM or as a native executable.
Unit tests can be run on the JVM using the `test` task and as a native executable using the `nativeTest` task.

Application tests are always executed on the JVM against an application that's running on the JVM or as a native executable.
The `appTest` task tests the application running on the JVM.The `nativeAppTest` task tests the application running as a native executable.

== Contributing

Please read and follow the link:CONTRIBUTING.adoc[contributing guide].

== Initial Setup

The smoke tests resolve commercial dependencies from https://repo.spring.io which requires authentication.
Use the `REPO_SPRING_IO_USERNAME` and `REPO_SPRING_IO_PASSWORD` environment variables to provide the necessary credentials.

== How to

=== Run all of a project's smoke tests

[source,]
----
./gradlew :<name of the group>:<name of the smoke test>:build
----

for example

[source,]
----
./gradlew :boot:actuator-webmvc:build
----

=== Run a specific type of tests for a project

[source,]
----
./gradlew :<name of the group>:<name of the smoke test>:<test task name>
----

Valid test task names are:

1. `appTest`  tests the application running on the JVM
2. `nativeAppTest`  tests the application running as a native executable
3. `test`  executes the AOT-processed unit tests on the JVM
4. `nativeTest`  executes the AOT-processed unit tests in a native executable

for example

[source,]
----
./gradlew :boot:actuator-webmvc:appTest
----

=== Add a new smoke test

1. Create a new directory for your smoke test in the appropriate group
2. Include the directory in `settings.gradle` (new groups only)
3. Consult the https://github.com/spring-projects/spring-aot-smoke-tests/tree/ci/README.adoc[README in the `ci` branch] to update the CI infrastructure

=== Test against local changes

==== Your project uses Gradle

[source,]
----
./gradlew :<name of the group>:<name of the smoke test>:build --include-build /path/to/your/project
----

Gradle https://docs.gradle.org/current/userguide/composite_builds.html#command_line_composite[will then substitute the dependency] with your provided version.

_Hint: You can use `--include-build` multiple times._

==== Your project uses Maven or --include-build does not work

First, install the snapshots into your local Maven cache.
You can now consume those snapshots using `-PfromMavenLocal` which takes a comma-separated list of group IDs:

[source,]
----
./gradlew :rest-template:build -PfromMavenLocal=org.springframework,org.springframework.data
----

The preceding example will run the `rest-template` smoke test, resolving Spring Framework and Spring Data modules from your local Maven cache.

=== Using snapshots

By default, the smoke tests will use snapshots of `org.springframework.*` dependencies.
Note that `org.springframework.boot` and `org.springframework.cloud` dependencies are not affected.
Their versions are controlled by the `springBootVersion` and `springCloudVersion` properties defined in `gradle.properties`.

For each eligible dependency, the snapshot version that is used is derived from the dependency's default version:

- `x.y.z-SNAPSHOT` is left as-is
- `x.y.z` is changed to `x.y.z+1-SNAPSHOT`
- `x.y.z-Mn` is changed to `x.y.z-SNAPSHOT`
- `x.y.z-RCn` is changed to `x.y.z-SNAPSHOT`

To disable this behavior, set the `forceSnapshots` property to `false`, as shown in the following example:

[source,]
----
./gradlew :boot:actuator-webmvc:build -PforceSnapshots=false
----

=== Override a dependency version

As the test doesn't use the Spring Dependency Management Plugin, you can't use the `ext['...'] = '...'` method.

Instead, use https://docs.gradle.org/current/userguide/dependency_constraints.html[Gradle dependency constraints].
Say, for example, you want to update the version of Spring Session JDBC to `3.0.0-SNAPSHOT`:

[source,]
----
dependencies {
    // ...
    constraints {
        implementation('org.springframework.session:spring-session-jdbc:3.0.0-SNAPSHOT')
    }
}
----

This works for direct and transitive dependencies.
Description
No description provided
Readme 3.2 MiB
Languages
Java 97.1%
Kotlin 2.6%
HTML 0.2%