Skip to content

[BUG] Required dependency missing: org.json:json #568

Open
@johan-afm

Description

@johan-afm

Is there an existing issue for this?

  • I have searched the existing issues

SDK Version

<dependency>
  <groupId>com.optimizely.ab</groupId>
  <artifactId>core-api</artifactId>
  <version>4.1.1</version>
</dependency>

Current Behavior

Using JsonConfigParser leads to runtime exception, because it requires org.json.JsonObject from org.json:json which is not provided as an implementation dependency.

JsonConfigParser https://github.com/optimizely/java-sdk/blob/master/core-api/src/main/java/com/optimizely/ab/config/parser/JsonConfigParser.java

Dependency excluded here: https://github.com/optimizely/java-sdk/blob/master/core-api/build.gradle#L11

Expected Behavior

Users of your library should be able to use JsonConfigParser without knowing about its internal dependencies.

Steps To Reproduce

Create a Project with
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>repro</artifactId>
    <groupId>repro</groupId>
    <version>1.0.0</version>


    <dependencies>
        <dependency>
            <groupId>com.optimizely.ab</groupId>
            <artifactId>core-api</artifactId>
            <version>4.1.1</version>
        </dependency>
    </dependencies>
</project>

and settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
          https://maven.apache.org/xsd/settings-1.0.0.xsd">

</settings>

and src/main/java/Main.java

import com.optimizely.ab.config.parser.ConfigParseException;
import com.optimizely.ab.config.parser.JsonConfigParser;

public class Main {

    public static void main(String[] args) {

        System.out.println("Hello, World!");

        JsonConfigParser parser = new JsonConfigParser();
        try {
            parser.parseProjectConfig("{}");
        } catch (ConfigParseException e) {
            e.printStackTrace();
        }
    }
}

% mvn clean compile
% mvn exec:java -Dexec.mainClass=Main

Java Version

% mvn -version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/local/Cellar/maven/3.9.9/libexec
Java version: 11.0.22, vendor: Amazon.com Inc.

Link

No response

Logs

No response

Severity

No response

Workaround/Solution

Solution
Change https://github.com/optimizely/java-sdk/blob/master/core-api/build.gradle#L11
from compileOnly to implementation

Alternatively, do not expose JsonConfigParser to consumers of your library.

Recent Change

No response

Conflicts

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions