mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-27 17:10:22 -04:00
Document how to test a dev version of a 3party dependency (#78962)
* Document how to test a dev version of a 3party dependency - Introduce a FAQ section to BUILDING.MD - Provide three solutions to test and use a custom third party dependency in our elasticsearch build * Fix jitpack repo declaration * Tweak formatting * Apply review feedback Co-authored-by: Rory Hunter <pugnascotia@users.noreply.github.com> * Apply further review feedback Co-authored-by: Rory Hunter <pugnascotia@users.noreply.github.com> * Tweak recommendations for replacing a dependency Apply review feedback * Elaborate on dependency declaration to resolves jars from flat dir repositories Co-authored-by: Rory Hunter <pugnascotia@users.noreply.github.com>
This commit is contained in:
parent
9fa366adbc
commit
00c172e902
1 changed files with 96 additions and 0 deletions
96
BUILDING.md
96
BUILDING.md
|
@ -135,3 +135,99 @@ dependencies {
|
|||
}
|
||||
}
|
||||
```
|
||||
|
||||
## FAQ
|
||||
|
||||
### How do I test a development version of a third party dependency?
|
||||
|
||||
To test an unreleased development version of a third party dependency you have several options.
|
||||
|
||||
#### How to use a maven based third party dependency via mavenlocal?
|
||||
|
||||
1. Clone the third party repository locally
|
||||
2. Run `mvn install` to install copy into your `~/.m2/repository` folder.
|
||||
3. Add this to the root build script:
|
||||
|
||||
```
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
}
|
||||
}
|
||||
```
|
||||
4. Update the version in your dependency declaration accordingly (likely a snapshot version)
|
||||
5. Run the gradle build as needed
|
||||
|
||||
#### How to use a maven built based third party dependency with jitpack repository?
|
||||
|
||||
https://jitpack.io is an adhoc repository that supports building maven projects transparently in the background when
|
||||
resolving unreleased snapshots from a github repository. This approach also works as temporally solution
|
||||
and is compliant with our CI builds.
|
||||
|
||||
1. Add the JitPack repository to the root build file:
|
||||
|
||||
```
|
||||
allprojects {
|
||||
repositories {
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
}
|
||||
```
|
||||
2. Add the dependency in the following format
|
||||
```
|
||||
dependencies {
|
||||
implementation 'com.github.User:Repo:Tag'
|
||||
}
|
||||
```
|
||||
|
||||
As version you could also use a certain short commit hash or `master-SNAPSHOT`.
|
||||
In addition to snapshot builds JitPack supports building Pull Requests. Simply use PR<NR>-SNAPSHOT as the version.
|
||||
|
||||
3. Run the gradle build as needed. Keep in mind the initial resolution might take a bit longer as this needs to be built
|
||||
by JitPack in the background before we can resolve the adhoc built dependency.
|
||||
|
||||
---
|
||||
|
||||
**NOTE**
|
||||
|
||||
You should only use that approach locally or on a developer branch for for production dependencies as we do
|
||||
not want to ship unreleased libraries into our releases.
|
||||
---
|
||||
|
||||
#### How to use a custom third party artifact?
|
||||
|
||||
For third party libraries that are not built with maven (e.g. ant) or provided as a plain jar artifact we can leverage
|
||||
a flat directory repository that resolves artifacts from a flat directory on your filesystem.
|
||||
|
||||
1. Put the jar artifact with the format `artifactName-version.jar` into a directory named `localRepo` (you have to create this manually)
|
||||
2. Declare a flatDir repository in your root build.gradle file
|
||||
|
||||
```
|
||||
allprojects {
|
||||
repositories {
|
||||
flatDir {
|
||||
dirs 'localRepo'
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
3. Update the dependency declaration of the artifact in question to match the custom build version. For a file named e.g. `jmxri-1.2.1.jar` the
|
||||
dependency definition would be `:jmxri:1.2.1` as it comes with no group information:
|
||||
|
||||
```
|
||||
dependencies {
|
||||
implementation ':jmxri:1.2.1'
|
||||
}
|
||||
```
|
||||
4. Run the gradle build as needed.
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
As Gradle prefers to use modules whose descriptor has been created from real meta-data rather than being generated,
|
||||
flat directory repositories cannot be used to override artifacts with real meta-data from other repositories declared in the build.
|
||||
For example, if Gradle finds only `jmxri-1.2.1.jar` in a flat directory repository, but `jmxri-1.2.1.pom` in another repository
|
||||
that supports meta-data, it will use the second repository to provide the module.
|
||||
Therefore it is recommended to declare a version that is not resolveable from public repositories we use (e.g. maven central)
|
||||
---
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue