Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce the environment builder API and implement a micromamba-based build handler #6

Merged
merged 121 commits into from
Sep 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
194871c
Begin working on the conda environment builder
ctrueden Oct 18, 2023
673ffe4
test commit
carlosuc3m Nov 2, 2023
9dda13d
add code to be able to download micromamba
carlosuc3m Nov 2, 2023
aef1579
add utils to decompress mamba
carlosuc3m Nov 2, 2023
782f167
finalize the methods to unbzip2 and untar
carlosuc3m Nov 3, 2023
b5b947d
imporve mamba installation
carlosuc3m Nov 3, 2023
73afaf7
adapt to micromamba
carlosuc3m Nov 3, 2023
d33b785
remove not used anymore dep
carlosuc3m Nov 3, 2023
bd36222
remove forgotten import
carlosuc3m Nov 3, 2023
450d73f
install correctly mamba
carlosuc3m Nov 3, 2023
619d9fa
correct small errors
carlosuc3m Nov 3, 2023
f5aab60
adopt mamba syntax
carlosuc3m Nov 3, 2023
2a8b81d
fix paths
carlosuc3m Nov 6, 2023
0bbb2ad
add consumer to conda run to keep track of conda env installation
carlosuc3m Nov 6, 2023
4d2b25f
make verbose
carlosuc3m Nov 6, 2023
92c1cbe
send information when creating an env or runnning conda env
carlosuc3m Nov 7, 2023
40c46b4
send err stream
carlosuc3m Nov 7, 2023
7029a90
add permissions to executable and create default Conda builder
carlosuc3m Nov 8, 2023
79be3ce
update paths
carlosuc3m Nov 8, 2023
f0e981b
rduce waiting time
carlosuc3m Nov 22, 2023
06b629b
reduce the update period
carlosuc3m Nov 22, 2023
3894a92
improve log of env installation, more reactive
carlosuc3m Nov 23, 2023
3098f80
use just one thread to recover process info
carlosuc3m Nov 23, 2023
e4814ca
correct line separation
carlosuc3m Nov 23, 2023
004ccc4
add TODO
carlosuc3m Nov 23, 2023
cce6b68
start doing method that checks whether a dependency is installed in a
carlosuc3m Jan 23, 2024
2792d75
keep adding methods that improve the env management
carlosuc3m Jan 23, 2024
ebf7abe
add todo
carlosuc3m Jan 23, 2024
05f4c6d
improve the robustness of package checking
carlosuc3m Jan 24, 2024
d46b8fa
keep increasing robustness
carlosuc3m Jan 24, 2024
1572111
improve the logic of dependency checking
carlosuc3m Jan 24, 2024
bcbbe57
add method to find whether python is installed and its version is
carlosuc3m Jan 24, 2024
a8dedd3
refactor Conda to Mamba to avoid confusion
carlosuc3m Jan 29, 2024
ffc3edd
add exception
carlosuc3m Jan 29, 2024
599d3c0
give the possibility of installing or not when instantiating Mamba
carlosuc3m Jan 29, 2024
bcbb4cf
reorganize method to make it more understandable
carlosuc3m Jan 29, 2024
4b6b3f9
keep increaseing robustness
carlosuc3m Jan 29, 2024
cbe14be
delete unnecessary method
carlosuc3m Jan 29, 2024
923817a
improve robustness of methods
carlosuc3m Jan 29, 2024
a83b234
make methods dynamic
carlosuc3m Jan 30, 2024
1f6007c
add docs
carlosuc3m Jan 30, 2024
4f320bd
design consumer scaffold
carlosuc3m Jan 30, 2024
d5aec8c
define the consumers and remove the argument from method
carlosuc3m Jan 30, 2024
4a0be27
remove now unnecessary methods
carlosuc3m Jan 30, 2024
c48b3d5
add logic to track progress of download
carlosuc3m Jan 30, 2024
ed00b68
reduce method size and improve micromamba download
carlosuc3m Jan 30, 2024
8e5aa04
add forgotten exception
carlosuc3m Jan 30, 2024
562a2a7
add -c to run code
carlosuc3m Jan 30, 2024
586a5e1
allow providing env name or env dir
carlosuc3m Jan 30, 2024
bd91379
correct error in logic
carlosuc3m Jan 30, 2024
4e7010b
cathc every exception
carlosuc3m Jan 30, 2024
686e8f8
recover methods that i thought were not useful
carlosuc3m Jan 30, 2024
8977e29
remove force argument
carlosuc3m Jan 30, 2024
ddc6c3a
add automatic yes for everything
carlosuc3m Jan 30, 2024
bc7bcbc
do not do the installation at the same time as the instantiation
carlosuc3m Feb 1, 2024
920d09d
check the installation works
carlosuc3m Feb 5, 2024
cb056b1
do not throw exceptions when instantiating mamba
carlosuc3m Feb 5, 2024
b83da2c
add method to install if it is missing
carlosuc3m Feb 5, 2024
28e61ed
incorrect logic
carlosuc3m Feb 5, 2024
dd8cdb7
remove blocking code
carlosuc3m Feb 5, 2024
ed58aff
MambaInstallerUtils: inline copy helper method
ctrueden Aug 12, 2024
202b480
Improve javadoc blurbs
ctrueden Aug 12, 2024
cd5087a
Integrate JDLL's improvements to the Mamba builder
ctrueden Aug 12, 2024
4b2ddb5
Don't invoke mamba if no environment was requested
ctrueden Aug 12, 2024
5b6f520
Merge branch 'main' into env-builder
ctrueden Aug 12, 2024
78a0a3c
Fix IntelliJ warnings; do minor cleanups
ctrueden Aug 12, 2024
9cdf301
Remove pinned ivy version
ctrueden Aug 13, 2024
f2a974d
Add aspirational conda builder test, for TDD
ctrueden Aug 14, 2024
7a8091f
POM: bump major/minor version
ctrueden Aug 16, 2024
6210697
Fix up the license headers
ctrueden Aug 16, 2024
e52a7cc
Add notes on how the Builder API should work
ctrueden Aug 12, 2024
c5efc9e
Remove unused java(vendor, version) builder method
ctrueden Aug 16, 2024
d2463ba
Disallow direct construction of Builder objects
ctrueden Aug 16, 2024
405d27f
Fix bugs in the conda builder test
ctrueden Aug 19, 2024
893c7fb
Remove "install appose from source" hack
ctrueden Aug 19, 2024
e02c8b3
Add helper method to get env dir for a given name
ctrueden Aug 19, 2024
e106e2d
Add helper method to get env name from YAML file
ctrueden Aug 19, 2024
146dd69
Fix NPE when building conda env if baseDir unset
ctrueden Aug 19, 2024
05a02c0
Move mamba logic into subpackage
ctrueden Aug 21, 2024
0c57e98
Revise builder notes to address design wrinkles
ctrueden Aug 21, 2024
7fee9af
Builder: remove unused imports
ctrueden Aug 22, 2024
ba75fa0
Encapsulate ArchiveException from unTar failures
ctrueden Aug 22, 2024
73b1518
Add TODO to fix the user agent
ctrueden Aug 22, 2024
f8b8248
Add FilePaths methods to merge directories
ctrueden Aug 27, 2024
c5e0db2
Test the FilePaths utility methods
ctrueden Aug 26, 2024
18a313e
Add BuildHandler interface
ctrueden Aug 27, 2024
c3dcf0d
Fix Mamba class authors
ctrueden Aug 27, 2024
391ac2d
Replace non-breaking spaces with regular spaces
ctrueden Aug 27, 2024
4888567
Make copyright notice not be a javadoc
ctrueden Aug 27, 2024
e6b2382
Migrate Mamba builder to a BuildHandler plugin
ctrueden Aug 30, 2024
59c2a47
Remove unused mamba-related functionality
ctrueden Aug 30, 2024
ab26a3a
Make internal classes package-private
ctrueden Aug 30, 2024
40e81f7
Generalize mamba doc from "Python" to "Conda"
ctrueden Aug 30, 2024
642ac7f
Eschew use of platform-sensitive File.separator
ctrueden Aug 30, 2024
fa91a8c
Slim down the Mamba code some more
ctrueden Aug 30, 2024
bb87fec
Fix Mamba.downloadMicromamba exception handling
ctrueden Aug 30, 2024
8df1818
Remove more unnecessary mamba code
ctrueden Aug 30, 2024
0d96b4f
Clean up dependencies
ctrueden Aug 30, 2024
0d74f40
Pass the Builder instance to BuildHandler#build
ctrueden Sep 6, 2024
1cf53e1
Make minor javadoc, comment, and exception tweaks
ctrueden Sep 6, 2024
fd0bdc4
Remove more unneeded Mamba code
ctrueden Sep 6, 2024
01e9242
Remove unused variable declarations
ctrueden Sep 6, 2024
e68bc8d
Add build event subscription infrastructure
ctrueden Sep 6, 2024
211319a
Simplify Mamba event consumer infrastructure
ctrueden Sep 6, 2024
d7130c2
Remove unneeded import
ctrueden Sep 6, 2024
71ba68c
Fix some whitespace issues
ctrueden Sep 6, 2024
8a19094
Forward Mamba events to Builder event subscribers
ctrueden Sep 6, 2024
2ca4fd6
CI: run the build on all three major platforms
ctrueden Sep 11, 2024
8a9a224
CI: upgrade checkout and setup-java versions
ctrueden Sep 11, 2024
004ef26
CI: cache the Appose cache
ctrueden Sep 11, 2024
f3a8a3e
Improve ApposeTest debugging features
ctrueden Sep 11, 2024
b53c524
Increase ApposeTest#testServiceStartupFailure info
ctrueden Sep 19, 2024
7588ac0
Fix bugs in updated micromamba build handler
ctrueden Sep 19, 2024
5e5455f
Declare thrown exceptions in consistent order
ctrueden Sep 20, 2024
89d6f6c
Use `mamba run -p $envDir ...` to run via mamba
ctrueden Sep 20, 2024
60cb726
Add builder method for debugging env building
ctrueden Sep 20, 2024
8b3bad6
Remove unneeded TODO notes in shm logic
ctrueden Sep 20, 2024
eced85c
Fix non-conda Appose environment behavior
ctrueden Sep 23, 2024
18e09b9
Make env building debug output nicer
ctrueden Sep 23, 2024
59461a8
Resolve documentation TODOs in Appose.java
ctrueden Sep 23, 2024
4ea317b
Fix shm test failures on macOS
ctrueden Sep 24, 2024
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
20 changes: 17 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@ on:

jobs:
build:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up Java
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'zulu'
Expand All @@ -29,6 +34,15 @@ jobs:
with:
python-version: '3.10'

- name: Cache Appose environments
id: cache-appose
uses: actions/cache@v4
with:
path: ~/.local/share/appose
key: ${{ runner.os }}-build-appose-${{ hashFiles('*') }}
restore-keys: |
${{ runner.os }}-build-appose-

- name: Set up CI environment
run: .github/setup.sh

Expand Down
291 changes: 291 additions & 0 deletions notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,291 @@
## Builder API

* Want an API to create an environment from an envFile: i.e. `pixi.toml` or `environment.yml`.
* Want an API to build up an environment piecemeal: adding dependencies one by one.
* Do we need an API to mix and match these two things? I.e. start from envFile but then add on?
- An argument for this: what if you want to mix in Java JARs? pixi.toml can't do that yet.
* Want an API to create an environment from a *string* representation of an envFile.

Most flexible to put all these things into the Builder, not only directly in Appose (like `system()`).

What sorts of dependencies do we want to support adding?

1. conda-forge packages
2. PyPI packages
3. Maven coords
4. Java itself

Pixi gets us (1) and (2).

* Maven coords can be gotten by Groovy Grape in Java, by jgo in Python. (jgo needs work)
* Java itself can be gotten by cjdk in Python; what about from Java? Port cjdk? Or hack it with openjdk conda for now?

Should we make the API more general than the above? Yes! We can use `ServiceLoader`, same as we do with `ShmFactory`.

The interface is `BuildHandler`:
* `boolean include(String content, String scheme)`
* `boolean channel(String name, String location)`

And the implementations + supported schemes are:
* `PixiHandler` -- `environment.yml`, `pixi.toml`, `pypi`, `conda`, and null.
* `MavenHandler` -- `maven`
* `JDKHandler` -- `openjdk`

Although the term "scheme" might be confused with URI scheme, other terms are problematic too:
* "platform" will be confused with OS/arch.
* "method" will be confused with functions of a class.
* "system" might be confused with the computer itself, and/or system environment, path, etc.
* "paradigm" sounds too pretentious.
* "repoType" is rather clunky.

The `Builder` then has its own `include` and `channel` methods that delegate to
all discovered `BuildHandler` plugins. The `Builder` can also have more
convenience methods:

* `Builder file(String filePath) { return file(new File(filePath)); }`
* `Builder file(String filePath, String scheme) { return file(new File(filePath), scheme); }`
* `Builder file(File file) { return file(file, file.getName()); }`
* `Builder file(File file, String scheme) { return include(readContentsAsString(file), scheme); }`

For the `file`-to-`include` trick to work with files like `requirements.txt`,
the handling of `conda`/null scheme should split the content string into lines,
and process them in a loop.

Here are some example API calls made possible by the above design:
```java
Appose.env()
.file("/path/to/environment.yml")
// OR: .file("/path/to/pixi.toml")
// OR: .file("/path/to/requirements.txt", "pypi")
.include("cowsay", "pypi")
.include("openjdk>=17") // Install OpenJDK from conda-forge!
.include("maven") // Install Maven from conda-forge... confusing, yeah?
.include("conda-forge::maven") // Specify channel explicitly with environment.yml syntax.
.include("org.scijava:parsington", "maven")
// OR: .include("org.scijava:parsington") i.e. infer `maven` from the colon?
// OR: .include("org.scijava:parsington:2.0.0", "maven")
.channel("scijava", "maven:https://maven.scijava.org/content/groups/public")
.include("sc.fiji:fiji", "maven")
.include("zulu:17", "openjdk") // Install an OpenJDK from the Coursier index.

.channel("bioconda") // Add a conda channel
.channel(name: str, location: str = None)
.build() // Whew!
```

### 2024-08-20 update

One tricky thing is the base directory when combining paradigms:
* Get rid of "base directory" naming (in conda, the "base" environment is something else, so it's a confusing word here) in favor of `${appose-cache-dir}/${env-name}` convention. By default, `appose-cache-dir` equals `~/.local/share/appose`, but we could provide a way to override it...
* Similarly, get rid of the `base(...)` builder method in favor of adding a `build(String envName) -> Environment` signature.
* But what to name `Environment#base` property now? I really like `base`... Maybe `basedir`? Or `prefix``?
* Each `BuildHandler` catalogs the `include` and `channel` calls it feels are relevant, but does not do anything until `build` is finally called.
* If `build()` is called with no args, then the build handlers are queried sequentially (`default String envName() { return null; }`?). The first non-null name that comes back is taken as truth and then `build(thatName)` is passed to all handlers. Otherwise, an exception is raised "No environment name given".
* Environments all live in `~/.local/share/appose/<name>`, where `<name>` is the name of the environment. If `name:` is given in a `pixi.toml` or `environment.yml`, great, the `PixiBuildHandler` can parse out that string when its `envName()` method is called.

What about starting child processes via `pixi run`? That's not agnostic of the builder...
* What if the build handlers are also involved in child process launches? The `service(exes, args)` method could delegate to them...
* `BuildHandler` &rarr; `EnvHandler`?
* In `Environment`, how about replacing `use_system_path` with just a `path` list of dirs to check for executables being launched by `service`? Then we could dispense with the boilerplate `python`, `bin/python` repetition.
* Each env handler gets a chance to influence the worker launch args... and/or bin dirs...
- The pixi handler could prepend `.../pixi run` when a `pixi.toml` is present.
But this is tricky, because it goes *before* the selected exe... pre-args vs post-args uhhh

So, environment has:
* path (list of directories -- only used if `all_args[0]` is not already an absolute path to an executable program already?)
* launcher (list of string args to prepend)
* classpath (list of elements to include when running java)

* `Map<String, List<String>>` is what's returned by the `build(...)` step of each `BuildHandler`.
- Relevant keys include: "path", "classpath", "launcher"
- The `new Environment() { ... }` invocation will aggregate the values given here into its accessors.

* When running a service, it first uses the path to search for the requested exe, before prepending the launcher args.
- What about pixi + cjdk? We'll need the full path to java...
- How can we tell the difference between that and pixi alone with openjdk from conda-forge?
- In the former case, we need the full path, in the latter case, no.
- Pixi should just put `${envDir}/bin` onto the path, no?
- There is an edge case where `pixi run foo` works, even though `foo` is not an executable on the path... in which case, the environment service can just plow ahead with it when it can't find a `foo` executable on the path. But it should *first* make an attempt to reify the `foo` from the environment `path` before punting in that way.

#### pixi

During its build step, it prepends `[/path/to/pixi, run]` to the environment's launcher list, and `${env-dir}/bin` to the environment's path list.

#### cjdk

```
cjdk -j adoptium:21 java-home
/home/curtis/.cache/cjdk/v0/jdks/d217ee819493b9c56beed2e4d481e4c370de993d/jdk-21.0.4+7
/home/curtis/.cache/cjdk/v0/jdks/d217ee819493b9c56beed2e4d481e4c370de993d/jdk-21.0.4+7/bin/java -version
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
```

So `JDKHandler`, during its build step, prepends the java-home directory to the environment's path: `$(cjdk -j adoptium:21 java-home)/bin`

#### Maven

No need to add any directories to the environment path!

However, if Maven artifacts are added via `includes`, they should not only be downloaded, but also be part of the class path when launching java-based programs. We could do that by putting classpath into the `Environment` class directly, along side `path`... it's only a little hacky ;_;

## Pixi

Is even better than micromamba. It's a great fit for Appose's requirements.

### Setup for Appose

```shell
# Install a copy of Pixi into Appose's workspace.
mkdir -p ~/.local/share/appose/tmp
cd ~/.local/share/appose/tmp
curl -fsLO https://github.com/prefix-dev/pixi/releases/download/v0.27.1/pixi-x86_64-unknown-linux-musl.tar.gz
mkdir -p ../.pixi/bin
cd ../.pixi/bin
tar xf ../tmp/pixi-x86_64-unknown-linux-musl.tar.gz
alias pixi=~/.local/share/appose/.pixi/bin/pixi
```

And/or consider setting `PIXI_HOME` to `$HOME/.local/share/appose`
when using the `$HOME/.local/share/appose/.pixi/bin/pixi` binary.
This would let us, in the future, tweak Pixi's Appose-wide configuration
by adding a `$HOME/.local/share/appose/.pixi/config.toml` file.

#### Create an Appose environment

```shell
mkdir -p ~/.local/share/appose/sc-fiji-spiff
pixi init ~/.local/share/appose/sc-fiji-spiff
```

#### Add channels to the project/environment

```shell
cd ~/.local/share/appose/sc-fiji-spiff
pixi project channel add bioconda pytorch
```

Doing them all in one command will have less overhead.

#### Add dependencies to the project/environment

```shell
cd ~/.local/share/appose/sc-fiji-spiff
pixi add python pip
pixi add --pypi cowsay
```

Doing them all in two commands (one for conda, one for pypi) will have less overhead.

#### Use it

```shell
pixi run python -c 'import cowsay; cowsay.cow("moo")'
```

One awesome thing is that Appose will be able to launch the
child process using `pixi run ...`, which takes care of running
activation scripts before launch&mdash;so the child program should
work as though run from an activated environment (or `pixi shell`).

### Bugs

#### Invalid environment names do not fail fast

```shell
pixi project environment add sc.fiji.spiff
pixi tree
```
Fails with: `Failed to parse environment name 'sc.fiji.spiff', please use only lowercase letters, numbers and dashes`

### Multiple environments in one pixi project?

I explored making a single Appose project and using pixi's multi-environment
support to manage Appose environments, all within that one project, as follows:

```shell
# Initialize the shared Appose project.
pixi init
pixi project description set "Appose: multi-language interprocess cooperation with shared memory."

# Create a new environment within the Appose project.
pixi project environment add sc-fiji-spiff
# Install dependencies into a feature with matching name.
pixi add --feature sc-fiji-spiff python pip
pixi add --feature sc-fiji-spiff --pypi cowsay
# No known command to link sc-fiji-spiff feature with sc-fiji-spiff project...
mv pixi.toml pixi.toml.old
sed 's/sc-fiji-spiff = \[\]/sc-fiji-spiff = ["sc-fiji-spiff"]/' pixi.toml.old > pixi.toml
# Finally, we can use the environment!
pixi run --environment sc-fiji-spiff python -c 'import cowsay; cowsay.cow("moo")'
```

This works, but a single `pixi.toml` file for all of Appose is probably too
fragile, whereas a separate project folder for each Appose environment should
be more robust, reducing the chance that one Appose-based project (e.g. JDLL)
might stomp on another Appose-based project (e.g. TrackMate) due to their usage
of the same `pixi.toml`.

So we'll just settle for pixi's standard behavior here: a single environment
named `default` per pixi project, with one pixi project per Appose environment.
Unfortunately, that means our environment directory structure will be:
```
~/.local/share/appose/sc-fiji-spiff/.pixi/envs/default
```
for an Appose environment named `sc-fiji-spiff`.
(Note that environment names cannot contain dots, only alphameric and dash.)

To attain a better structure, I tried creating a `~/.local/share/appose/sc-fiji-spiff/.pixi/config.toml` with contents:
```toml
detached-environments: "/home/curtis/.local/share/appose"
```

It works, but then the environment folder from above ends up being:
```
~/.local/share/appose/sc-fiji-spiff-<many-numbers>/envs/sc-fiji-spiff
```
Looks like pixi creates one folder under `envs` for each project, with a
numerical hash to reduce collisions between multiple projects with the same
name... and then still makes an `envs` folder for that project beneath it.
So there is no escape from pixi's directory convention of:
```
<project-folder>/envs/<env-name>
```
Which of these is the least annoying?
```
~/.local/share/appose/sc-fiji-spiff/.pixi/envs/default
~/.local/share/appose/sc-fiji-spiff-782634298734/envs/default
~/.local/share/appose/sc-fiji-spiff/envs/sc-fiji-spiff
~/.local/share/appose/sc-fiji-spiff-782634298734/envs/sc-fiji-spiff
```
The detached-environments approach is actually longer, and entails
additional configuration and more potential for confusion; the
shortest path ends up being the first one, which is pixi's standard
behavior anyway.

The only shorter one would be:
```
~/.local/share/appose/.pixi/envs/sc-fiji-spiff
```
if we opted to keep `~/.local/share/appose` as a single Pixi project
root with multiple environments... but the inconvenience and risks
around a single shared `pixi.toml`, and hassle of multi-environment
configuration, outweigh the benefit of slightly shorter paths.

With separate Pixi projects we can also let Appose users specify their own
`pixi.toml` (maybe a partial one?), directly. Or an `environment.yml` that gets
used via `pixi init --import`. Maybe someday even a `requirements.txt`, if the
request (https://github.com/prefix-dev/pixi/issues/1410) gets implemented.

## Next steps

1. Add tests for the current Mamba builder.
2. Make the tests pass.
3. Introduce `BuildHandler` design and migrate Mamba logic to a build handler.
4. Implement a build handler built on pixi, to replace the micromamba one.
5. Implement build handlers for maven and openjdk.
6. Implement pixi, maven, and openjdk build handlers in appose-python, too.
7. Once it all works: release 0.3.0.

And: update https://github.com/imglib/imglib2-appose to work with appose 0.2.0+.
19 changes: 14 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

<groupId>org.apposed</groupId>
<artifactId>appose</artifactId>
<version>0.2.1-SNAPSHOT</version>
<version>0.3.0-SNAPSHOT</version>

<name>Appose</name>
<description>Appose: multi-language interprocess cooperation with shared memory.</description>
Expand Down Expand Up @@ -88,14 +88,12 @@

<license.licenseName>bsd_2</license.licenseName>
<license.copyrightOwners>Appose developers.</license.copyrightOwners>

<ivy.version>2.5.1</ivy.version>
</properties>

<dependencies>
<!--
NB: This list of dependencies must be kept in sync with
the org.apposed.appose.Environment#javaService method!
the org.apposed.appose.Environment#java method!
-->

<!-- Groovy service executor -->
Expand All @@ -110,7 +108,6 @@
<dependency>
<groupId>org.apache.ivy</groupId>
<artifactId>ivy</artifactId>
<version>${ivy.version}</version>
</dependency>

<!-- Native shared memory APIs -->
Expand All @@ -123,6 +120,12 @@
<artifactId>jna-platform</artifactId>
</dependency>

<!-- For decompressing micromamba -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
Expand All @@ -134,5 +137,11 @@
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<scope>test</scope>
</dependency>

</dependencies>
</project>
Loading
Loading