Use classloaders to load Java functions (#4685)

* Use classloading to load use code for functions
diff --git a/distribution/server/pom.xml b/distribution/server/pom.xml
index d233ea8..6fd5e5d 100644
--- a/distribution/server/pom.xml
+++ b/distribution/server/pom.xml
@@ -156,12 +156,6 @@
       <version>${project.version}</version>
       <!-- make sure the api examples are compiled before assembly -->
       <scope>provided</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>io.grpc</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
     </dependency>
 
     <!-- local-runner -->
diff --git a/distribution/server/src/assemble/bin.xml b/distribution/server/src/assemble/bin.xml
index c2d5996..bb3e273 100644
--- a/distribution/server/src/assemble/bin.xml
+++ b/distribution/server/src/assemble/bin.xml
@@ -131,6 +131,8 @@
         <exclude>io.netty:netty-transport-native-epoll</exclude>
         <exclude>io.netty:netty-transport-native-unix-common</exclude>
 
+        <exclude>org.apache.pulsar:pulsar-functions-runtime-all</exclude>
+
         <!-- Already included in pulsar-zookeeper instrumented jar -->
         <exclude>org.apache.zookeeper:zookeeper</exclude>