[ 
https://issues.apache.org/jira/browse/HIVE-30067?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ramit Gupta updated HIVE-30067:
-------------------------------
    Description: 
Geospatial UDFs that use JTS GeoJSON ( like 
[GeoJsonReader.java|[https://github.com/locationtech/jts/blob/master/modules/io/common/src/main/java/org/locationtech/jts/io/geojson/GeoJsonReader.java])]
 via jts-io-common e.g. in 
[[GeometryUtils.java|https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]|
 
[https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]]
 depend on {{json-simple}} for parsing

It can be reproduced locally via 
{code:java}
mvn test -pl itests/qtest -Pitests -Dtest=TestMiniLlapLocalCliDriver  
-Dqfile=geospatial_udfs.q -Dtest.output.overwrite{code}
running into 
{code:java}
ClassNotFoundException: org.json.simple.parser.ParseException{code}
due to absance of json-simple in test classpath

Why it is not picked in CI?
CI uses
[https://github.com/apache/hive/blob/4cf07f490af49d0e0e019d07c45b629ed8802136/Jenkinsfile#L408]
, whose similar locally working eg. :
{code:java}
mvn -Pitests org.apache.maven.plugins:maven-surefire-plugin:test 
Dtest=TestMiniLlapLocalCliDriver.java -Dqfile=geospatial_udfs.q
{code}
since it is ran from project root, due to which maven resolves the entire 
dependency chain (including transitive ones) and  get pulled into test 
classpath due to single reactor for all modules as -pl is not specified

Similarly at runtime all the transitive deps are part of classpath so it 
doesn't get picked up there as well.
{*}Note{*}: This is only for Deployments and tests that rely on a single 
{{hive-exec-*.jar}} like the case I mentioned of MiniLlap driver above.

  was:
Geospatial UDFs that use JTS GeoJSON ( like 
[GeoJsonReader.java|[https://github.com/locationtech/jts/blob/master/modules/io/common/src/main/java/org/locationtech/jts/io/geojson/GeoJsonReader.java])]
 via jts-io-common e.g. in 
[[GeometryUtils.java|https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]|
 
[https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]]
 depend on {{json-simple}} for parsing

It can be reproduced locally via 

 
{code:java}
mvn test -pl itests/qtest -Pitests -Dtest=TestMiniLlapLocalCliDriver  
-Dqfile=geospatial_udfs.q -Dtest.output.overwrite{code}
 

running into 
{code:java}
ClassNotFoundException: org.json.simple.parser.ParseException{code}
due to absance of json-simple in test classpath

Why it is not picked in CI?
CI uses
https://github.com/apache/hive/blob/4cf07f490af49d0e0e019d07c45b629ed8802136/Jenkinsfile#L408
, whose similar locally working eg. :

 

 
{code:java}
mvn -Pitests org.apache.maven.plugins:maven-surefire-plugin:test 
Dtest=TestMiniLlapLocalCliDriver.java -Dqfile=geospatial_udfs.q
{code}
since it is ran from project root, due to which maven resolves the entire 
dependency chain (including transitive ones) and  get pulled into test 
classpath due to single reactor for all modules as -pl is not specified

Similarly at runtime all the transitive deps are part of classpath so it 
doesn't get picked up there as well.
{*}Note{*}: This is only for Deployments and tests that rely on a single 
{{hive-exec-*.jar}} like the case I mentioned of MiniLlap driver above.


> Include json-simple in hive-exec shaded jar for JTS GeoJSON
> -----------------------------------------------------------
>
>                 Key: HIVE-30067
>                 URL: https://issues.apache.org/jira/browse/HIVE-30067
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Ramit Gupta
>            Assignee: Ramit Gupta
>            Priority: Minor
>
> Geospatial UDFs that use JTS GeoJSON ( like 
> [GeoJsonReader.java|[https://github.com/locationtech/jts/blob/master/modules/io/common/src/main/java/org/locationtech/jts/io/geojson/GeoJsonReader.java])]
>  via jts-io-common e.g. in 
> [[GeometryUtils.java|https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]|
>  
> [https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java]]
>  depend on {{json-simple}} for parsing
> It can be reproduced locally via 
> {code:java}
> mvn test -pl itests/qtest -Pitests -Dtest=TestMiniLlapLocalCliDriver  
> -Dqfile=geospatial_udfs.q -Dtest.output.overwrite{code}
> running into 
> {code:java}
> ClassNotFoundException: org.json.simple.parser.ParseException{code}
> due to absance of json-simple in test classpath
> Why it is not picked in CI?
> CI uses
> [https://github.com/apache/hive/blob/4cf07f490af49d0e0e019d07c45b629ed8802136/Jenkinsfile#L408]
> , whose similar locally working eg. :
> {code:java}
> mvn -Pitests org.apache.maven.plugins:maven-surefire-plugin:test 
> Dtest=TestMiniLlapLocalCliDriver.java -Dqfile=geospatial_udfs.q
> {code}
> since it is ran from project root, due to which maven resolves the entire 
> dependency chain (including transitive ones) and  get pulled into test 
> classpath due to single reactor for all modules as -pl is not specified
> Similarly at runtime all the transitive deps are part of classpath so it 
> doesn't get picked up there as well.
> {*}Note{*}: This is only for Deployments and tests that rely on a single 
> {{hive-exec-*.jar}} like the case I mentioned of MiniLlap driver above.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to