Skip to content

Commit da8846e

Browse files
authored
Fix using the Coherence console via kubectl exec (#696)
1 parent 1e19137 commit da8846e

File tree

24 files changed

+365
-125
lines changed

24 files changed

+365
-125
lines changed

Makefile

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ TEST_COHERENCE_IMAGE ?= $(COHERENCE_IMAGE)
6161
TEST_COHERENCE_VERSION ?= $(COHERENCE_VERSION)
6262
TEST_COHERENCE_GID ?= com.oracle.coherence.ce
6363

64+
# The minimum certified OpenShift version the Operator runs on
65+
OPENSHIFT_MIN_VERSION := v4.15
66+
OPENSHIFT_COMPONENT_PID := 67b738ef88736e8a179ac976
67+
6468
# The current working directory
6569
CURRDIR := $(shell pwd)
6670

@@ -340,13 +344,15 @@ SHELL = /usr/bin/env bash -o pipefail
340344
# Capture the Git commit to add to the build information that is then embedded in the Go binary
341345
# ----------------------------------------------------------------------------------------------------------------------
342346
GITCOMMIT ?= $(shell git rev-list -1 HEAD)
347+
GITBRANCH ?= $(shell git branch --show-current)
343348
GITREPO := https://github.com/oracle/coherence-operator.git
344349
SOURCE_DATE_EPOCH := $(shell git show -s --format=format:%ct HEAD)
345350
DATE_FMT := "%Y-%m-%dT%H:%M:%SZ"
346-
BUILD_DATE := $(shell date -u -d "@$SOURCE_DATE_EPOCH" "+${DATE_FMT}" 2>/dev/null || date -u -r "${SOURCE_DATE_EPOCH}" "+${DATE_FMT}" 2>/dev/null || date -u "+${DATE_FMT}")
351+
#BUILD_DATE := $(shell date -u -d "@$SOURCE_DATE_EPOCH" "+${DATE_FMT}" 2>/dev/null || date -u -r "${SOURCE_DATE_EPOCH}" "+${DATE_FMT}" 2>/dev/null || date -u "+${DATE_FMT}")
352+
BUILD_DATE := $(shell date -u "+${DATE_FMT}")
347353
BUILD_USER := $(shell whoami)
348354

349-
LDFLAGS = -X main.Version=$(VERSION) -X main.Commit=$(GITCOMMIT) -X main.Date=$(BUILD_DATE) -X main.Author=$(BUILD_USER)
355+
LDFLAGS = -X main.Version=$(VERSION) -X main.Commit=$(GITCOMMIT) -X main.Branch=$(GITBRANCH) -X main.Date=$(BUILD_DATE) -X main.Author=$(BUILD_USER)
350356
GOS = $(shell find . -type f -name "*.go" ! -name "*_test.go")
351357
HELM_FILES = $(shell find helm-charts/coherence-operator -type f)
352358
API_GO_FILES = $(shell find . -type f -name "*.go" ! -name "*_test.go" ! -name "zz*.go")
@@ -460,7 +466,9 @@ $(BUILD_PROPS):
460466
clean: ## Cleans the build
461467
-rm -rf $(BUILD_OUTPUT) || true
462468
-rm -rf $(BUILD_BIN) || true
469+
-rm -rf artifacts || true
463470
-rm -rf bundle || true
471+
-rm bundle.Dockerfile || true
464472
rm config/crd/bases/*.yaml || true
465473
rm -rf config/crd-small || true
466474
rm pkg/data/zz_generated_*.go || true
@@ -895,6 +903,13 @@ bundle: $(BUILD_PROPS) ensure-sdk $(TOOLS_BIN)/kustomize $(BUILD_TARGETS)/manife
895903
$(OPERATOR_SDK) generate kustomize manifests
896904
cd config/manager && $(KUSTOMIZE) edit set image controller=$(OPERATOR_IMAGE)
897905
$(KUSTOMIZE) build config/manifests | $(OPERATOR_SDK) generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS)
906+
@echo "" >> ./bundle/metadata/annotations.yaml
907+
@echo " # OpenShift annotations" >> ./bundle/metadata/annotations.yaml
908+
@echo " com.redhat.openshift.versions: $(OPENSHIFT_MIN_VERSION)" >> ./bundle/metadata/annotations.yaml
909+
@echo "" >> bundle.Dockerfile
910+
@echo "# OpenShift labels" >> bundle.Dockerfile
911+
@echo "LABEL com.redhat.openshift.versions=$(OPENSHIFT_MIN_VERSION)" >> bundle.Dockerfile
912+
@echo "cert_project_id: $(OPENSHIFT_COMPONENT_PID)" > bundle/ci.yaml
898913
$(OPERATOR_SDK) bundle validate ./bundle
899914
$(OPERATOR_SDK) bundle validate ./bundle --select-optional suite=operatorframework --optional-values=k8s-version=1.26
900915
$(OPERATOR_SDK) bundle validate ./bundle --select-optional name=operatorhubv2 --optional-values=k8s-version=1.26
@@ -952,7 +967,7 @@ catalog-build: opm ## Build a catalog image.
952967
# Push the catalog image.
953968
.PHONY: catalog-push
954969
catalog-push: ## Push a catalog image.
955-
$(DOCKER_CMD) push $(CATALOG_IMAGE)
970+
$(DOCKER_CMD) push $(PUSH_ARGS) $(CATALOG_IMAGE)
956971

957972
.PHONY: scorecard
958973
scorecard: $(BUILD_PROPS) ensure-sdk bundle ## Run the Operator SDK scorecard tests.
@@ -1037,9 +1052,6 @@ jk: $(BUILD_PREFLIGHT)/preflight.yaml
10371052

10381053
# Generate the preflight job yaml
10391054
$(BUILD_PREFLIGHT)/preflight.yaml: hack/preflight.yaml
1040-
#ifeq ($(PREFLIGHT_REGISTRY_CRED),)
1041-
# $(error $(n)The PREFLIGHT_REGISTRY_CRED variable must be specified to run preflight$(n)Typically using the command$(n)$(n) export PREFLIGHT_REGISTRY_CRED=$$(echo -n bogus:$$(oc whoami -t) | base64)$(n)$(n))
1042-
#endif
10431055
cp hack/preflight.yaml $(BUILD_PREFLIGHT)/preflight.yaml
10441056
$(SED) -e 's^image-placeholder^$(OPERATOR_IMAGE)^g' $(BUILD_PREFLIGHT)/preflight.yaml
10451057
$(SED) -e 's/registry-credential-placeholder/$(PREFLIGHT_REGISTRY_CRED)/g' $(BUILD_PREFLIGHT)/preflight.yaml
@@ -2299,6 +2311,7 @@ PUSH_ARGS ?=
22992311
push-operator-image: $(BUILD_TARGETS)/build-operator
23002312
$(DOCKER_CMD) push $(PUSH_ARGS) $(OPERATOR_IMAGE_AMD)
23012313
$(DOCKER_CMD) push $(PUSH_ARGS) $(OPERATOR_IMAGE_ARM)
2314+
$(DOCKER_CMD) rmi $(OPERATOR_IMAGE) || true
23022315
$(DOCKER_CMD) manifest create $(PUSH_ARGS) $(OPERATOR_IMAGE) \
23032316
--amend $(OPERATOR_IMAGE_AMD) \
23042317
--amend $(OPERATOR_IMAGE_ARM)
@@ -2326,27 +2339,27 @@ push-test-images:
23262339
.PHONY: push-ttl-test-images
23272340
push-ttl-test-images:
23282341
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE) $(TTL_APPLICATION_IMAGE)
2329-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE)
2342+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE)
23302343
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_CLIENT) $(TTL_APPLICATION_IMAGE_CLIENT)
2331-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_CLIENT)
2344+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_CLIENT)
23322345
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_HELIDON) $(TTL_APPLICATION_IMAGE_HELIDON)
2333-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_HELIDON)
2346+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_HELIDON)
23342347
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_HELIDON_3) $(TTL_APPLICATION_IMAGE_HELIDON_3)
2335-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_HELIDON_3)
2348+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_HELIDON_3)
23362349
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_HELIDON_2) $(TTL_APPLICATION_IMAGE_HELIDON_2)
2337-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_HELIDON_2)
2350+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_HELIDON_2)
23382351
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING) $(TTL_APPLICATION_IMAGE_SPRING)
2339-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING)
2352+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING)
23402353
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING_FAT) $(TTL_APPLICATION_IMAGE_SPRING_FAT)
2341-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING_FAT)
2354+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING_FAT)
23422355
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING_CNBP) $(TTL_APPLICATION_IMAGE_SPRING_CNBP)
2343-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING_CNBP)
2356+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING_CNBP)
23442357
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING_2) $(TTL_APPLICATION_IMAGE_SPRING_2)
2345-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING_2)
2358+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING_2)
23462359
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING_FAT_2) $(TTL_APPLICATION_IMAGE_SPRING_FAT_2)
2347-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING_FAT_2)
2360+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING_FAT_2)
23482361
$(DOCKER_CMD) tag $(TEST_APPLICATION_IMAGE_SPRING_CNBP_2) $(TTL_APPLICATION_IMAGE_SPRING_CNBP_2)
2349-
$(DOCKER_CMD) push $(TTL_APPLICATION_IMAGE_SPRING_CNBP_2)
2362+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_APPLICATION_IMAGE_SPRING_CNBP_2)
23502363

23512364
# ----------------------------------------------------------------------------------------------------------------------
23522365
# Build the Operator Test images
@@ -2365,15 +2378,15 @@ build-compatibility-image: $(BUILD_TARGETS)/java
23652378
# ----------------------------------------------------------------------------------------------------------------------
23662379
.PHONY: push-compatibility-image
23672380
push-compatibility-image: build-compatibility-image
2368-
$(DOCKER_CMD) push $(TEST_COMPATIBILITY_IMAGE)
2381+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TEST_COMPATIBILITY_IMAGE)
23692382

23702383
# ----------------------------------------------------------------------------------------------------------------------
23712384
# Push the Operator JIB Test Docker images to ttl.sh
23722385
# ----------------------------------------------------------------------------------------------------------------------
23732386
.PHONY: push-ttl-compatibility-image
23742387
push-ttl-compatibility-image:
23752388
$(DOCKER_CMD) tag $(TEST_COMPATIBILITY_IMAGE) $(TTL_COMPATIBILITY_IMAGE)
2376-
$(DOCKER_CMD) push $(TTL_COMPATIBILITY_IMAGE)
2389+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_COMPATIBILITY_IMAGE)
23772390

23782391
# ----------------------------------------------------------------------------------------------------------------------
23792392
# Push all of the Docker images
@@ -2387,7 +2400,7 @@ push-all-images: push-test-images push-operator-image
23872400
.PHONY: push-ttl-operator-images
23882401
push-ttl-operator-images:
23892402
$(DOCKER_CMD) tag $(OPERATOR_IMAGE) $(TTL_OPERATOR_IMAGE)
2390-
$(DOCKER_CMD) push $(TTL_OPERATOR_IMAGE)
2403+
$(DOCKER_CMD) push $(PUSH_ARGS) $(TTL_OPERATOR_IMAGE)
23912404

23922405
# ----------------------------------------------------------------------------------------------------------------------
23932406
# Push all the images to ttl.sh

config/manager/manager.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ spec:
2828
version: "3.4.3"
2929
app.kubernetes.io/component: manager
3030
app.kubernetes.io/part-of: coherence-operator
31+
annotations:
32+
alpha.image.policy.openshift.io/resolve-names: '*'
3133
spec:
3234
serviceAccountName: service-account
3335
terminationGracePeriodSeconds: 10

config/manifests/bases/coherence-operator.clusterserviceversion.yaml

Lines changed: 37 additions & 26 deletions
Large diffs are not rendered by default.

hack/setup-podman.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ export OPERATOR_IMAGE_REGISTRY=${REGISTRY}/oracle
1818
export PREFLIGHT_REGISTRY_CRED=$(echo -n bogus:$(oc whoami -t) | base64)
1919

2020
podman login -u bogus -p $(oc whoami -t) --tls-verify=false ${REGISTRY}
21+
podman login -u bogus -p $(oc whoami -t) --tls-verify=false ${OPERATOR_IMAGE_REGISTRY}
2122

23+
#oc new-project oracle || true
24+
#oc -n oracle create is coherence-operator || true
25+
# Allow anyone to pull oracle images
26+
#oc adm policy add-role-to-group system:image-puller system:authenticated --namespace=oracle

java/coherence-operator/src/main/java/com/oracle/coherence/k8s/CoherenceOperatorLifecycleListener.java

Lines changed: 108 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2023, Oracle and/or its affiliates.
2+
* Copyright (c) 2021, 2025, Oracle and/or its affiliates.
33
* Licensed under the Universal Permissive License v 1.0 as shown at
44
* http://oss.oracle.com/licenses/upl.
55
*/
@@ -157,7 +157,7 @@ public void preStart(Context context) {
157157
context.getConfigurableCacheFactory().getInterceptorRegistry().registerEventInterceptor(this);
158158
}
159159
catch (Throwable t) {
160-
LOGGER.error("Failed to initialise the Coherence Operator", t);
160+
LOGGER.error("CoherenceOperator: Failed to initialise the Coherence Operator", t);
161161
}
162162
}
163163

@@ -281,59 +281,126 @@ void initCohCtl() {
281281
String provider = Config.getProperty("coherence.management.http.provider");
282282
String defaultProtocol = provider == null || provider.isEmpty() ? "http" : "https";
283283
String protocol = Config.getProperty("coherence.operator.cli.protocol", defaultProtocol);
284-
String home = System.getProperty("user.home");
285-
File fileHome = new File(home);
286284
String connectionType = "http";
287285

288-
if (!fileHome.exists() || !fileHome.isDirectory()) {
289-
LOGGER.info("CoherenceOperator: user home \"" + home
290-
+ "\" does not exist, creating default cohctl config at /coherence-operator/utils");
291-
home = "/coherence-operator/utils";
292-
fileHome = new File(home);
286+
287+
// If COHCTL_HOME is set use that for the config location
288+
String cohCtlHome = System.getenv("COHCTL_HOME");
289+
if (cohCtlHome == null || !cohCtlHome.isEmpty()) {
290+
// Try corresponding system property
291+
cohCtlHome = Config.getProperty("cohctl.home");
293292
}
294293

295-
if (!fileHome.exists() || !fileHome.isDirectory()) {
296-
LOGGER.error("CoherenceOperator: Cannot create cohctl config, directory " + home + " does not exist");
294+
// If we have a COHCTL_HOME env var or property try to create the config there
295+
if (cohCtlHome != null && !cohCtlHome.isEmpty()
296+
&& tryCreateConfig(new File(cohCtlHome), connectionType, protocol, port, clusterName)) {
297297
return;
298298
}
299299

300-
File cohctlHome = new File(home + File.separator + ".cohctl");
301-
File configFile = new File(cohctlHome, "cohctl.yaml");
300+
// Either COHCTL_HOME was not set or we failed to create a config there, try ${user.home}
301+
String userHome = System.getProperty("user.home");
302+
File fileUserHome = new File(userHome);
303+
File fileCohCtlHome = null;
304+
305+
if (fileUserHome.exists() && fileUserHome.isDirectory()) {
306+
// use ${user.home}/.cohctl
307+
fileCohCtlHome = new File(fileUserHome, ".cohctl");
308+
if (!fileCohCtlHome.exists()) {
309+
try {
310+
if (!fileCohCtlHome.mkdirs()) {
311+
fileCohCtlHome = null;
312+
}
313+
}
314+
catch (Exception e) {
315+
LOGGER.error("CoherenceOperator: Failed to create cohctl home directory at " + fileCohCtlHome, e);
316+
fileCohCtlHome = null;
317+
}
318+
}
319+
}
302320

303-
if (!configFile.exists()) {
304-
LOGGER.info("CoherenceOperator: creating default cohctl config at " + configFile.getAbsolutePath());
305-
if (!cohctlHome.exists()) {
306-
cohctlHome.mkdirs();
321+
boolean success = false;
322+
if (fileCohCtlHome != null) {
323+
if (fileCohCtlHome.exists() && fileCohCtlHome.isDirectory()) {
324+
success = tryCreateConfig(fileCohCtlHome, connectionType, protocol, port, clusterName);
325+
}
326+
else {
327+
if (!fileCohCtlHome.exists()) {
328+
LOGGER.error("CoherenceOperator: Cannot create cohctl config, directory "
329+
+ fileCohCtlHome + " does not exist");
330+
}
331+
else {
332+
LOGGER.error("CoherenceOperator: Cannot create cohctl config, location "
333+
+ fileCohCtlHome + " is not a directory");
334+
}
307335
}
308-
try (PrintWriter out = new PrintWriter(configFile)) {
309-
out.println("clusters:");
310-
out.println(" - name: default");
311-
out.println(" discoverytype: manual");
312-
out.println(" connectiontype: " + connectionType);
313-
out.println(" connectionurl: " + protocol + "://127.0.0.1:" + port + "/management/coherence/cluster");
314-
out.println(" nameservicediscovery: \"\"");
315-
out.println(" clusterversion: \"" + CacheFactory.VERSION + "\"");
316-
out.println(" clustername: \"" + clusterName + "\"");
317-
out.println(" clustertype: Standalone");
318-
out.println(" manuallycreated: false");
319-
out.println(" baseclasspath: \"\"");
320-
out.println(" additionalclasspath: \"\"");
321-
out.println(" arguments: \"\"");
322-
out.println(" managementport: 0");
323-
out.println(" persistencemode: \"\"");
324-
out.println(" loggingdestination: \"\"");
325-
out.println(" managementavailable: false");
326-
out.println("color: \"on\"");
327-
out.println("currentcontext: default");
328-
out.println("debug: false");
329-
out.println("defaultbytesformat: m");
330-
out.println("ignoreinvalidcerts: false");
331-
out.println("requesttimeout: 30");
336+
}
337+
338+
if (!success) {
339+
if (fileCohCtlHome != null) {
340+
LOGGER.info("CoherenceOperator: unable to create cohctl config in \"" + fileCohCtlHome
341+
+ "\" creating cohctl config at /coherence-operator/utils");
332342
}
343+
tryCreateConfig(new File("/coherence-operator/utils"), connectionType, protocol, port, clusterName);
344+
}
345+
}
346+
catch (Exception e) {
347+
LOGGER.error("Coherence Operator: Failed to create default cohctl config. " + e.getMessage());
348+
}
349+
}
350+
351+
/**
352+
* Try to create the Coherence CLI configuration.
353+
*
354+
* @param home the location of the CLI home directory
355+
* @param connectionType the type of the connection http or https
356+
* @param protocol the protocol for the connection http or https
357+
* @param port the management over REST port
358+
* @param clusterName the cluster name
359+
*
360+
* @return {@code true} of the configuration was created
361+
*/
362+
protected boolean tryCreateConfig(File home, String connectionType, String protocol, String port, String clusterName) {
363+
File configFile = new File(home, "cohctl.yaml");
364+
365+
if (configFile.exists()) {
366+
return true;
367+
}
368+
369+
try {
370+
LOGGER.info("CoherenceOperator: creating default cohctl config at " + configFile.getAbsolutePath());
371+
if (!home.exists()) {
372+
home.mkdirs();
373+
}
374+
try (PrintWriter out = new PrintWriter(configFile)) {
375+
out.println("clusters:");
376+
out.println(" - name: default");
377+
out.println(" discoverytype: manual");
378+
out.println(" connectiontype: " + connectionType);
379+
out.println(" connectionurl: " + protocol + "://127.0.0.1:" + port + "/management/coherence/cluster");
380+
out.println(" nameservicediscovery: \"\"");
381+
out.println(" clusterversion: \"" + CacheFactory.VERSION + "\"");
382+
out.println(" clustername: \"" + clusterName + "\"");
383+
out.println(" clustertype: Standalone");
384+
out.println(" manuallycreated: false");
385+
out.println(" baseclasspath: \"\"");
386+
out.println(" additionalclasspath: \"\"");
387+
out.println(" arguments: \"\"");
388+
out.println(" managementport: 0");
389+
out.println(" persistencemode: \"\"");
390+
out.println(" loggingdestination: \"\"");
391+
out.println(" managementavailable: false");
392+
out.println("color: \"on\"");
393+
out.println("currentcontext: default");
394+
out.println("debug: false");
395+
out.println("defaultbytesformat: m");
396+
out.println("ignoreinvalidcerts: false");
397+
out.println("requesttimeout: 30");
333398
}
399+
return true;
334400
}
335401
catch (Exception e) {
336402
LOGGER.error("Coherence Operator: Failed to create default cohctl config. " + e.getMessage());
403+
return false;
337404
}
338405
}
339406
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/bin/sh -e
22

3-
docker build -t jk/coherence:1.0.0 -f operator-compatibility/target/classes/Dockerfile ./operator-compatibility
3+
docker build --load -t jk/coherence:1.0.0 -f operator-compatibility/target/classes/Dockerfile ./operator-compatibility

java/operator-compatibility/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
<executable>docker</executable>
6161
<arguments>
6262
<argument>build</argument>
63+
<argument>--load</argument>
6364
<argument>-t</argument>
6465
<argument>${coherence.compatibility.image.name}</argument>
6566
<argument>-f</argument>

java/operator-test-helidon-2/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@
5555
<artifactId>coherence</artifactId>
5656
<version>${coherence.version}</version>
5757
</dependency>
58+
<dependency>
59+
<groupId>${coherence.groupId}</groupId>
60+
<artifactId>coherence-json</artifactId>
61+
</dependency>
5862
<dependency>
5963
<groupId>${coherence.groupId}</groupId>
6064
<artifactId>coherence-cdi-server</artifactId>

0 commit comments

Comments
 (0)