This is
continuation to my previous post. In this post, I am going to create two jar
files.
a.
interfaces.jar
b.
implementation.jar
Creating
interfaces.jar file
Create
Arithmetic.java file by following below directory structure.
$tree . └── interfaces └── com └── sample └── demoapp └── interfaces └── Arithmetic.java 5 directories, 1 file $
Arithmetic.java
package com.sample.demoapp.interfaces; public interface Arithmetic { public int add(int a, int b); public int sub(int a, int b); public int mul(int a, int b); public int div(int a, int b); }
Go inside
of interfaces folder and compile Arithmetic.java.
$cd interfaces/ $ $javac com/sample/demoapp/interfaces/Arithmetic.java $ $tree . └── com └── sample └── demoapp └── interfaces ├── Arithmetic.class └── Arithmetic.java 4 directories, 2 files
Create jar
file by executing below command from interfaces folder.
jar -cvf interfaces.jar
*
$jar -cvf interfaces.jar * added manifest adding: com/(in = 0) (out= 0)(stored 0%) adding: com/sample/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/interfaces/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/interfaces/Arithmetic.class(in = 195) (out= 157)(deflated 19%) adding: com/sample/demoapp/interfaces/Arithmetic.java(in = 205) (out= 102)(deflated 50%)
Total
project structure looks like below.
$tree . └── interfaces ├── com │ └── sample │ └── demoapp │ └── interfaces │ ├── Arithmetic.class │ └── Arithmetic.java └── interfaces.jar 5 directories, 3 files
Step 2:
Create implementation.jar
file.
Create
ArithemticImpl.java by following below directory structure.
$tree . ├── implementation └── com └── sample └── demoapp └── interfaces └── impl └── ArithemticImpl.java
ArithemticImpl.java
package com.sample.demoapp.interfaces.impl; import com.sample.demoapp.interfaces.Arithmetic; public class ArithmeticImpl implements Arithmetic { @Override public int add(int a, int b) { return a + b; } @Override public int sub(int a, int b) { return a - b; } @Override public int mul(int a, int b) { return a * b; } @Override public int div(int a, int b) { return a / b; } }
Total
directory structure of interfaces and implementation project looks like below.
$tree . ├── implementation │ └── com │ └── sample │ └── demoapp │ └── interfaces │ └── impl │ └── ArithemticImpl.java └── interfaces ├── com │ └── sample │ └── demoapp │ └── interfaces │ ├── Arithmetic.class │ └── Arithmetic.java └── interfaces.jar 11 directories, 4 files
Go to
implementation directory and compile ArithmeticImpl.java file by executing below
command.
javac -cp
../interfaces/ com/sample/demoapp/interfaces/impl/ArithmeticImpl.java
$javac -cp ../interfaces/ com/sample/demoapp/interfaces/impl/ArithmeticImpl.java $ $tree . └── com └── sample └── demoapp └── interfaces └── impl ├── ArithmeticImpl.class └── ArithmeticImpl.java 5 directories, 2 files
Create jar
file by executing below command from the implementation folder.
$jar -cvf implementation.jar * added manifest adding: com/(in = 0) (out= 0)(stored 0%) adding: com/sample/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/interfaces/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/interfaces/impl/(in = 0) (out= 0)(stored 0%) adding: com/sample/demoapp/interfaces/impl/ArithmeticImpl.java(in = 403) (out= 158)(deflated 60%) adding: com/sample/demoapp/interfaces/impl/ArithmeticImpl.class(in = 485) (out= 272)(deflated 43%) $ $tree . ├── com │ └── sample │ └── demoapp │ └── interfaces │ └── impl │ ├── ArithmeticImpl.class │ └── ArithmeticImpl.java └── implementation.jar 5 directories, 3 files
Step 3:
Create App.java that
Load ArithmeticImpl class using classloader.
Create
App.java file, where exactly interface and implementation folders are located.
App.java
import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import com.sample.demoapp.interfaces.Arithmetic; public class App { public static void main(String args[]) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException { URL url = new URL( "file:/Users/krishna/Documents/TechnicalDocuments/Java/examples/classloading/implementation/implementation.jar"); URLClassLoader classLoader = new URLClassLoader(new URL[] { url }); Class clazz = classLoader.loadClass("com.sample.demoapp.interfaces.impl.ArithmeticImpl"); Arithmetic arithmetic = (Arithmetic) clazz.newInstance(); System.out.println("Sum of 10 and 20 is " + arithmetic.add(10, 20)); System.out.println("Subtraction of 10 and 20 is " + arithmetic.sub(10, 20)); System.out.println("Multiplication of 10 and 20 is " + arithmetic.mul(10, 20)); System.out.println("Division of 10 and 20 is " + arithmetic.div(10, 20)); } }
$tree . ├── App.java ├── implementation │ ├── com │ │ └── sample │ │ └── demoapp │ │ └── interfaces │ │ └── impl │ │ ├── ArithmeticImpl.class │ │ └── ArithmeticImpl.java │ └── implementation.jar └── interfaces ├── com │ └── sample │ └── demoapp │ └── interfaces │ ├── Arithmetic.class │ └── Arithmetic.java └── interfaces.jar 11 directories, 7 files
Compile
App.java by executing below command.
javac -cp
./interfaces App.java
Execute
App.java by running below command.
java -cp
./interfaces/: App
$java -cp ./interfaces/: App Sum of 10 and 20 is 30 Subtraction of 10 and 20 is -10 Multiplication of 10 and 20 is 200 Division of 10 and 20 is 0
You can
get the total working project code from below github location.
No comments:
Post a Comment