You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2023/08/03 14:54:28 UTC
[myfaces-tobago] 03/06: feature: Jakarta EE 10
This is an automated email from the ASF dual-hosted git repository.
hnoeth pushed a commit to branch JakartaEE10
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git
commit 604e2923774c8bb933f257b4c2b7de42056c1fe9
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Wed Jul 26 12:59:49 2023 +0200
feature: Jakarta EE 10
* support Jakarta EE 10 (Faces 4.0); drop support for Jakarta EE 9
* switch Faces 3.0 to 4.0 in POM
* TobagoActionSource no longer needed, because jakarta.faces.el.MethodBinding is removed and with it the deprecated methods implemented by TobagoActionSource
* DefaultResourceResolver deleted, because jakarta.faces.view.facelets.ResourceResolver is removed. The ResourceResolver was deprecated as of Jakarta Server Faces 2.2. The same functionality is more correctly provided by jakarta.faces.application.ResourceHandler. So hopefully Tobago don't need a default implementation.
* AbstractUITabGroup now implements ActionSource2 instead of TobagoActionSource (which had ActionSource2 implemented)
* DeltaStateHelper: implement new eval() method
* fix myfaces-test imports and exclude outdated junit-jupiter version
* update Jakarta dependencies in POM; adjust MockHttpSession
Issue: TOBAGO-2094
---
pom.xml | 39 ++++++------
tobago-core/pom.xml | 2 +-
.../myfaces/tobago/event/TobagoActionSource.java | 71 ----------------------
.../tobago/facelets/DefaultResourceResolver.java | 51 ----------------
.../tobago/internal/behavior/DeltaStateHelper.java | 9 ++-
.../internal/component/AbstractUITabGroup.java | 23 ++++---
.../internal/config/AbstractTobagoTestBase.java | 2 +-
.../internal/mock/servlet/MockHttpSession.java | 40 ------------
.../webapp/TobagoResponseWriterUnitTest.java | 2 +-
tobago-example/pom.xml | 28 ++++-----
tobago-example/tobago-example-demo/pom.xml | 4 +-
11 files changed, 59 insertions(+), 212 deletions(-)
diff --git a/pom.xml b/pom.xml
index 478345c64e..b9fce60a3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,8 +33,8 @@
<properties>
<frontend.skip>true</frontend.skip>
- <myfaces30.version>3.0.2</myfaces30.version>
- <mojarra30.version>3.0.5</mojarra30.version>
+ <myfaces40.version>4.0.1</myfaces40.version>
+ <mojarra40.version>4.0.3</mojarra40.version>
<openwebbeans.version>2.0.27</openwebbeans.version>
<slf4j.version>2.0.7</slf4j.version>
<logback.version>1.4.8</logback.version>
@@ -147,19 +147,19 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.faces</artifactId>
- <version>${mojarra30.version}</version>
+ <version>${mojarra40.version}</version>
<optional>true</optional>
</dependency>
<!-- jcl-over-slf4j for myfaces -->
@@ -172,13 +172,13 @@
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
- <version>5.0.0</version>
+ <version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.el</groupId>
<artifactId>jakarta.el-api</artifactId>
- <version>4.0.0</version>
+ <version>5.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -240,7 +240,7 @@
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
- <version>2.0.0</version>
+ <version>2.1.1</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
@@ -250,7 +250,7 @@
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
- <version>2.0.0</version>
+ <version>3.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.inject</groupId>
@@ -261,7 +261,7 @@
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
- <version>3.0.1</version>
+ <version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -273,15 +273,21 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-test</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<!-- myfaces "next"-->
<!--
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-test</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>test</scope>
</dependency>
-->
@@ -301,7 +307,6 @@
</dependencyManagement>
<dependencies>
-
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
@@ -1116,12 +1121,12 @@
</profile>
<profile>
- <id>jsf-3.0</id>
+ <id>jsf-4.0</id>
<activation>
<property>
<name>!jsf</name>
<!-- <name>jsf</name>-->
-<!-- <value>myfaces-3.0</value>-->
+<!-- <value>myfaces-4.0</value>-->
</property>
</activation>
<dependencyManagement>
@@ -1129,13 +1134,13 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
diff --git a/tobago-core/pom.xml b/tobago-core/pom.xml
index af32f006aa..db2443db81 100644
--- a/tobago-core/pom.xml
+++ b/tobago-core/pom.xml
@@ -265,7 +265,7 @@
</profile>
<profile>
- <id>jsf-3.0</id>
+ <id>jsf-4.0</id>
<activation>
<property>
<name>!jsf</name>
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java
deleted file mode 100644
index 418d43ef4d..0000000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.myfaces.tobago.event;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import jakarta.faces.component.ActionSource2;
-import jakarta.faces.el.MethodBinding;
-
-import java.lang.invoke.MethodHandles;
-
-public interface TobagoActionSource extends ActionSource2 {
-
- Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
- /**
- * @deprecated Replaced by ActionSource2.getActionExpression
- */
-// @Override no longer overriding, because it was dropped in MyFaces 2.3-next
- @Deprecated
- default MethodBinding getAction() {
- LOG.debug("JSF 1.1 style is no longer supported!");
- return null;
- }
-
- /**
- * @deprecated Replaced by ActionSource2.setActionExpression
- */
-// @Override no longer overriding, because it was dropped in MyFaces 2.3-next
- @Deprecated
- default void setAction(MethodBinding action) {
- LOG.debug("JSF 1.1 style is no longer supported!");
- }
-
- /**
- * @deprecated Replaced by getActionListeners
- */
-// @Override no longer overriding, because it was dropped in MyFaces 2.3-next
- @Deprecated
- default MethodBinding getActionListener() {
- LOG.debug("JSF 1.1 style is no longer supported!");
- return null;
- }
-
- /**
- * @deprecated Replaced by getActionListeners
- */
-// @Override no longer overriding, because it was dropped in MyFaces 2.3-next
- @Deprecated
- default void setActionListener(MethodBinding actionListener) {
- LOG.debug("JSF 1.1 style is no longer supported!");
- }
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java
deleted file mode 100644
index dfcd737a4d..0000000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.myfaces.tobago.facelets;
-
-import jakarta.faces.FacesException;
-import jakarta.faces.context.FacesContext;
-import jakarta.faces.view.facelets.ResourceResolver;
-
-import java.io.IOException;
-import java.net.URL;
-
-/*
- * Was copied from MyFaces-Impl, because there is no JSF base class.
- */
-public class DefaultResourceResolver extends ResourceResolver {
-
- public DefaultResourceResolver() {
- super();
- }
-
- @Override
- public URL resolveUrl(final String path) {
- try {
- return Resource.getResourceUrl(FacesContext.getCurrentInstance(), path);
- } catch (final IOException e) {
- throw new FacesException(e);
- }
- }
-
- public String toString() {
- return "DefaultResourceResolver";
- }
-
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
index fd86a8fbc7..efb6fd5372 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
@@ -19,13 +19,12 @@
package org.apache.myfaces.tobago.internal.behavior;
-import org.apache.myfaces.tobago.exception.TobagoException;
-
import jakarta.el.ValueExpression;
import jakarta.faces.component.StateHelper;
import jakarta.faces.component.StateHolder;
import jakarta.faces.component.UIComponentBase;
import jakarta.faces.context.FacesContext;
+import org.apache.myfaces.tobago.exception.TobagoException;
import java.io.Serializable;
import java.util.ArrayList;
@@ -34,6 +33,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.function.Supplier;
// todo: clean up (is a copy of MyFaces, but not all stuff is refactored)
@@ -254,6 +254,11 @@ class DeltaStateHelper<A extends EventBehavior> implements StateHelper {
return defaultValue;
}
+ @Override
+ public Object eval(Serializable serializable, Supplier<Object> supplier) {
+ return eval(serializable, supplier.get());
+ }
+
@Override
public Object get(final Serializable key) {
return fullState.get(key);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
index 68d8f05838..e4c6883942 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
@@ -19,19 +19,9 @@
package org.apache.myfaces.tobago.internal.component;
-import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.SupportsAutoSpacing;
-import org.apache.myfaces.tobago.event.TabChangeEvent;
-import org.apache.myfaces.tobago.event.TabChangeListener;
-import org.apache.myfaces.tobago.event.TabChangeSource;
-import org.apache.myfaces.tobago.event.TobagoActionSource;
-import org.apache.myfaces.tobago.model.SwitchType;
-import org.apache.myfaces.tobago.util.FacesELUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import jakarta.el.MethodExpression;
import jakarta.el.ValueExpression;
+import jakarta.faces.component.ActionSource2;
import jakarta.faces.component.UIComponent;
import jakarta.faces.component.behavior.ClientBehaviorHolder;
import jakarta.faces.context.FacesContext;
@@ -39,6 +29,15 @@ import jakarta.faces.event.AbortProcessingException;
import jakarta.faces.event.ActionListener;
import jakarta.faces.event.FacesEvent;
import jakarta.faces.event.PhaseId;
+import org.apache.myfaces.tobago.component.Attributes;
+import org.apache.myfaces.tobago.component.SupportsAutoSpacing;
+import org.apache.myfaces.tobago.event.TabChangeEvent;
+import org.apache.myfaces.tobago.event.TabChangeListener;
+import org.apache.myfaces.tobago.event.TabChangeSource;
+import org.apache.myfaces.tobago.model.SwitchType;
+import org.apache.myfaces.tobago.util.FacesELUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
@@ -49,7 +48,7 @@ import java.util.List;
* {@link org.apache.myfaces.tobago.internal.taglib.component.TabGroupTagDeclaration}
*/
public abstract class AbstractUITabGroup extends AbstractUIPanelBase
- implements TabChangeSource, TobagoActionSource, ClientBehaviorHolder, SupportsAutoSpacing {
+ implements TabChangeSource, ActionSource2, ClientBehaviorHolder, SupportsAutoSpacing {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
index 815c2dc319..a7d89d1fbf 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
@@ -24,7 +24,7 @@ import jakarta.faces.component.behavior.AjaxBehavior;
import jakarta.faces.convert.DateTimeConverter;
import jakarta.faces.render.RenderKit;
import jakarta.servlet.ServletContext;
-import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit.AbstractJsfTestCase;
import org.apache.myfaces.test.config.ResourceBundleVarNames;
import org.apache.myfaces.test.mock.MockFacesContext;
import org.apache.myfaces.test.mock.MockHttpServletRequest;
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
index aed387f751..212e81cb30 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.mock.servlet;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpSession;
-import jakarta.servlet.http.HttpSessionContext;
import java.util.Enumeration;
import java.util.HashMap;
@@ -62,33 +61,6 @@ public class MockHttpSession implements HttpSession {
return 0;
}
- /**
- * @deprecated
- */
- @Deprecated
- @Override
- public HttpSessionContext getSessionContext() {
- return null;
- }
-
- /**
- * @deprecated
- */
- @Deprecated
- @Override
- public Object getValue(final String s) {
- return null;
- }
-
- /**
- * @deprecated
- */
- @Deprecated
- @Override
- public String[] getValueNames() {
- return new String[0];
- }
-
@Override
public void invalidate() {
}
@@ -98,23 +70,11 @@ public class MockHttpSession implements HttpSession {
return false;
}
- /**
- * @deprecated
- */
- @Deprecated
- @Override
- public void putValue(final String s, final Object o) {
- }
-
@Override
public void removeAttribute(final String s) {
attributes.remove(s);
}
- @Override
- public void removeValue(final String s) {
- }
-
@Override
public void setAttribute(final String s, final Object o) {
attributes.put(s, o);
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
index 49418de4dc..cf59ed8b96 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
@@ -19,7 +19,7 @@
package org.apache.myfaces.tobago.webapp;
-import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit.AbstractJsfTestCase;
import org.apache.myfaces.tobago.internal.webapp.HtmlResponseWriter;
import org.apache.myfaces.tobago.internal.webapp.XmlResponseWriter;
import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
diff --git a/tobago-example/pom.xml b/tobago-example/pom.xml
index 0eaf8d1bad..3580b349cf 100644
--- a/tobago-example/pom.xml
+++ b/tobago-example/pom.xml
@@ -178,49 +178,49 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
<profile>
- <id>myfaces-3.0</id>
+ <id>myfaces-4.0</id>
<activation>
<property>
<name>!jsf</name>
<!-- <name>jsf</name>-->
- <!-- <value>myfaces-3.0</value>-->
+ <!-- <value>myfaces-4.0</value>-->
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
<profile>
- <id>mojarra-3.0</id>
+ <id>mojarra-4.0</id>
<activation>
<property>
<name>jsf</name>
- <value>mojarra-3.0</value>
+ <value>mojarra-4.0</value>
</property>
</activation>
<dependencies>
@@ -401,13 +401,13 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
@@ -539,13 +539,13 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -604,13 +604,13 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>provided</scope>
</dependency>
<!-- this enables the development mode -->
diff --git a/tobago-example/tobago-example-demo/pom.xml b/tobago-example/tobago-example-demo/pom.xml
index fcd18cba44..2050ed14c2 100644
--- a/tobago-example/tobago-example-demo/pom.xml
+++ b/tobago-example/tobago-example-demo/pom.xml
@@ -374,13 +374,13 @@
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
- <version>${myfaces30.version}</version>
+ <version>${myfaces40.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>