[ 
https://issues.apache.org/jira/browse/ARTEMIS-3546?focusedWorklogId=681102&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-681102
 ]

ASF GitHub Bot logged work on ARTEMIS-3546:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 13/Nov/21 13:38
            Start Date: 13/Nov/21 13:38
    Worklog Time Spent: 10m 
      Work Description: gemmellr commented on a change in pull request #3846:
URL: https://github.com/apache/activemq-artemis/pull/3846#discussion_r748722072



##########
File path: artemis-commons/pom.xml
##########
@@ -53,6 +71,7 @@
       <dependency>
           <groupId>com.google.errorprone</groupId>
           <artifactId>error_prone_core</artifactId>
+         <scope>provided</scope>

Review comment:
       Did this make a difference? The dependencyManagement is setting the 
scope so it should already be at an effective provided. (Mainly just curious 
why you actually changed it, personally I do prefer each module states it)

##########
File path: artemis-core-client-osgi/pom.xml
##########
@@ -35,6 +35,17 @@
          <groupId>org.apache.activemq</groupId>
          <artifactId>artemis-commons</artifactId>
          <version>${project.version}</version>
+         <!-- TODO: even though these are shaded, maven still picking these up 
on builds -->
+         <exclusions>
+            <exclusion>
+               <groupId>org.apache.johnzon</groupId>
+               <artifactId>johnzon-core</artifactId>
+            </exclusion>
+            <exclusion>
+               <groupId>jakarta.json</groupId>
+               <artifactId>jakarta.json-api</artifactId>
+            </exclusion>
+         </exclusions>

Review comment:
       As with other comment, you had to do this since the deps are still 
listed as hard deps and so anything using artemis-commons will still get them 
transitively, unless you say otherwise in artemis-commons that they shouldnt. 
If you change that you will be able to remove all these repeated exclusions.

##########
File path: artemis-commons/pom.xml
##########
@@ -32,6 +32,24 @@
    </properties>
 
    <dependencies>
+
+      <!-- Johnzon and JSON is meant to be referenced only here on this 
package (commons)
+           and we should not leak any dependencies to JSON or Johnzon in any 
of our packages -->
+      <dependency>
+         <groupId>org.apache.johnzon</groupId>
+         <artifactId>johnzon-core</artifactId>
+         <version>${johnzon.version}</version>
+         <scope>compile</scope>

Review comment:
       You should use "provided" scope if you dont want things to get these 
transitively because you are going to shade them, otherwise anything depending 
on this module will clearly still depend on it transitively, since the module 
says it depends on them. If you use provided scope then dependent modules wont 
get these unless they declared their own dependency on it.

##########
File path: 
artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JsonUtil.java
##########
@@ -16,13 +16,13 @@
  */
 package org.apache.activemq.artemis.api.core;
 
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonNumber;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonString;
-import javax.json.JsonValue;
+import org.apache.activemq.artemis.commons.json.JsonArray;
+import org.apache.activemq.artemis.commons.json.JsonArrayBuilder;
+import org.apache.activemq.artemis.commons.json.JsonNumber;
+import org.apache.activemq.artemis.commons.json.JsonObject;
+import org.apache.activemq.artemis.commons.json.JsonObjectBuilder;
+import org.apache.activemq.artemis.commons.json.JsonString;
+import org.apache.activemq.artemis.commons.json.JsonValue;

Review comment:
       Just to be sure its intended/realised...noting this is presumably a 
breaking change for all existing management related usage of these bits. EDIT: 
As the later test changes show.

##########
File path: artemis-commons/pom.xml
##########
@@ -111,6 +126,46 @@
                </execution>
             </executions>
          </plugin>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-shade-plugin</artifactId>
+            <version>3.2.4</version>

Review comment:
       This plugins version is already being managed (to 3.2.0) in the parent 
pom pluginManagent, as it should be. Rely on that consistent version instead of 
adding inconsistent module-specific plugin usages.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 681102)
    Time Spent: 2h 40m  (was: 2.5h)

> ClassNotFoundException: javax.json.JsonValue when creating an 
> ActiveMQConnectionFactory using artemis-jakarta-client-all
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-3546
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3546
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: JMS
>    Affects Versions: 2.19.0
>            Reporter: Andy Wilkinson
>            Assignee: Clebert Suconic
>            Priority: Major
>             Fix For: 2.20.0
>
>          Time Spent: 2h 40m
>  Remaining Estimate: 0h
>
> As expected, {{artemis-jakarta-client-all}} contains the various 
> {{jakarta.json.\*}} classes from Jakarta EE 9. However, its bytecode still 
> references the {{javax.json.\*}} classes from EE 8. This results in a failure 
> at runtime when creating an {{ActiveMQConnectionFactory}}:
> {noformat}
> Exception in thread "main" java.lang.IllegalStateException: 
> java.lang.NoClassDefFoundError: javax/json/JsonValue
>       at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.<init>(ActiveMQConnectionFactory.java:225)
>       at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.<init>(ActiveMQConnectionFactory.java:218)
>       at example.Main.main(Main.java:8)
> Caused by: java.lang.NoClassDefFoundError: javax/json/JsonValue
>       at 
> org.apache.activemq.artemis.uri.schema.connector.TCPTransportConfigurationSchema.getTransportConfigurations(TCPTransportConfigurationSchema.java:68)
>       at 
> org.apache.activemq.artemis.uri.schema.serverLocator.TCPServerLocatorSchema.internalNewObject(TCPServerLocatorSchema.java:42)
>       at 
> org.apache.activemq.artemis.uri.schema.serverLocator.TCPServerLocatorSchema.internalNewObject(TCPServerLocatorSchema.java:33)
>       at 
> org.apache.activemq.artemis.utils.uri.URISchema.newObject(URISchema.java:86)
>       at 
> org.apache.activemq.artemis.utils.uri.URISchema.newObject(URISchema.java:30)
>       at 
> org.apache.activemq.artemis.utils.uri.URIFactory.newObject(URIFactory.java:59)
>       at 
> org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.newLocator(ServerLocatorImpl.java:333)
>       at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.setBrokerURL(ActiveMQConnectionFactory.java:243)
>       at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.<init>(ActiveMQConnectionFactory.java:223)
>       ... 2 more
> Caused by: java.lang.ClassNotFoundException: javax.json.JsonValue
>       at 
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>       at 
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>       at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
>       ... 11 more
> {noformat}
> With artemis-jakarta-client-all-2.19.0.jar on the classpath, the failure 
> above was produced by the following main class:
> {code:java}
> package example;
> import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
> public class Main {
>       
>     public static void main(String[] args) {
>         new ActiveMQConnectionFactory();
>     }
> }
> {code}
> The shaded Johnzon code also has references to {{javax.json.\*}} classes.
> A similar problem exists with {{artemis-jakarta-client}} when upgrading its 
> transitive dependencies to their Jakarta EE 9 versions.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to