diff --git a/bundles/jaxrs-ri/pom.xml b/bundles/jaxrs-ri/pom.xml
index f676560..064baf9 100644
--- a/bundles/jaxrs-ri/pom.xml
+++ b/bundles/jaxrs-ri/pom.xml
@@ -394,6 +394,9 @@
                                 <jar destfile="${project.build.directory}/${project.artifactId}-sources.jar" update="true">
                                     <zipfileset dir="../.." includes="NOTICE.md" prefix="META-INF" />
                                 </jar>
+                                <jar destfile="${project.build.directory}/${project.artifactId}.jar" update="true">
+                                    <zipfileset dir="../.." includes="LICENSE.md" prefix="META-INF" />
+                                </jar>
                             </target>
                         </configuration>
                         <goals>
diff --git a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
index ede8c36..ab71e1f 100644
--- a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
+++ b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
@@ -315,7 +315,12 @@
                }
 
                // Make the connection attempt.
-               chan = b.connect(host, port).sync().channel();
+                try {
+                    chan = b.connect(host, port).sync().channel();
+                } catch (Exception e) {
+                    responseAvailable.completeExceptionally(e);
+                    return;
+                }
             }
 
             // assert: clientHandler will always notify responseDone: either normally, or exceptionally
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java
new file mode 100644
index 0000000..d35394e
--- /dev/null
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.netty.connector;
+
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import jakarta.ws.rs.ProcessingException;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.Response;
+
+public class ConnectionExceptionTest {
+    @Test
+    public void testConnectionException() throws InterruptedException {
+        Assertions.assertThrows(ProcessingException.class, ()-> {
+            ClientConfig clientConfig = new ClientConfig();
+            clientConfig.connectorProvider(new NettyConnectorProvider());
+
+            Response r = ClientBuilder.newClient(clientConfig)
+                    .property(ClientProperties.CONNECT_TIMEOUT, 1000)
+                    .property(ClientProperties.READ_TIMEOUT, 1000)
+                    .target("http://test.nonono:8080").request().get();
+            r.close();
+        });
+    }
+}
diff --git a/tests/release-test/pom.xml b/tests/release-test/pom.xml
index 246040a..a28dc22 100644
--- a/tests/release-test/pom.xml
+++ b/tests/release-test/pom.xml
@@ -73,7 +73,7 @@
             <dependency>
                 <groupId>org.glassfish.jersey</groupId>
                 <artifactId>jersey-bom</artifactId>
-                <version>${jersey.version}</version>
+                <version>${project.version}</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java b/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java
new file mode 100644
index 0000000..74e0281
--- /dev/null
+++ b/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.test.artifacts;
+
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+
+public class LegalDocsIncludedTest extends AbstractMojoTestCase {
+    private static final File localRepository = MavenUtil.getLocalMavenRepository();
+    private static final Properties properties = MavenUtil.getMavenProperties();
+
+    private static final String LICENSE_FILE = "LICENSE.md";
+    private static final String NOTICE_FILE = "NOTICE.md";
+
+    @Test
+    public void testLegalFiles() throws IOException, XmlPullParserException {
+        TestResult testResult = new TestResult();
+        List<File> jars = MavenUtil.streamJerseyJars()
+                .map(dependency -> MavenUtil.getArtifactJar(localRepository, dependency, properties))
+                .collect(Collectors.toList());
+
+        for (File jar : jars) {
+            for (String filename : new String[]{LICENSE_FILE, NOTICE_FILE}) {
+                JarFile jarFile = new JarFile(jar);
+                String value;
+                try {
+                    value = jarFile.getEntry("META-INF/" + filename).getName();
+                } catch (NullPointerException npe) {
+                    value = null;
+                }
+                TestResult.MessageBuilder builder = value != null ? testResult.ok() : testResult.exception();
+                builder.append(jar.getName()).append(value == null ? " DOES NOT CONTAIN " : " CONTAINS ")
+                        .append(filename).println(" file");
+            }
+        }
+
+        //Assertions.assertTrue(testResult.result(), "Some error occurred, see previous messages");
+        Assert.assertTrue("Some error occurred, see previous messages", testResult.result());
+    }
+}
