• Load jar into classpath and access resources in it at runtime

    From mike@21:1/5 to All on Tue Jun 21 08:38:36 2022
    Hi,

    I have created a jar file, test-example.jar, and added under src/test/resources and now I want to make sure that when I run the testcase
    this jar file is loaded so I can access files in it. I am using java 11.

    Q1: How to load jar, in testcase, at runtime?
    Q2: How to access resource in jar. Resource resides in jar with the following path suites/tools/device/nc/testng2.xml

    br,

    //mike

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Arne_Vajh=c3=b8j?=@21:1/5 to mike on Tue Jun 21 14:09:34 2022
    On 6/21/2022 11:38 AM, mike wrote:
    I have created a jar file, test-example.jar, and added under src/test/resources
    and now I want to make sure that when I run the testcase
    this jar file is loaded so I can access files in it. I am using java 11.

    Q1: How to load jar, in testcase, at runtime?

    Standard technique is to instantiate a URLClassLoader for the
    jar file and use that to load files from the jar file.

    Q2: How to access resource in jar. Resource resides in jar with the following path suites/tools/device/nc/testng2.xml

    Maybe:

    theclassloader.getResourceAsStream("suites/tools/device/nc/testng2.xml"));

    Arne

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Daniele Futtorovic@21:1/5 to mike on Thu Jun 23 12:31:56 2022
    On 21/06/2022 17:38, mike wrote:
    Hi,

    I have created a jar file, test-example.jar, and added under src/test/resources
    and now I want to make sure that when I run the testcase
    this jar file is loaded so I can access files in it. I am using java 11.

    Q1: How to load jar, in testcase, at runtime?
    Q2: How to access resource in jar. Resource resides in jar with the following path suites/tools/device/nc/testng2.xml

    br,

    //mike

    Normally, what you put under /src is what you want packaged (in a JAR,
    WAR, etc.).
    If you put a JAR there, and your sources are packaged as a JAR, you'll
    end up with JAR inside your JAR. Which I would say is definitely
    technically workable. I'm not sure whether it's a recommended practice
    or not.

    To load such a JAR file, you'd have to load it as a resource

    Thread.getThread().getContextClassLoader().getResource(NAME_OF_THE_JAR_FILE)

    , then create a new ClassLoader for that resource -- which will be
    binary, so not a URLCLassLoader... Then load the resource/class you need
    from that classloader.

    Perhaps instead of the above, one could simply create a URLClassLoader
    with a "classpath:/NAME_OF_THE_JAR_FILE" URL. I mention it in case, but
    IIRC the "classpath:/" resource prefix is something that Spring code
    brings, it's not out of the box. Not sure.

    Alternatives to all of the above include:
    - at or before build time, extracting the files you need from the JAR
    and putting them in your /src tree flat;
    - putting the JAR file alongside your source tree (in a lib directory)
    and making sure it's added to the classpath when the runtime is
    launched, in which case you could access classes and resources from it
    as though they were in your /src tree.

    --
    DF.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From e.d.programmer@gmail.com@21:1/5 to Daniele Futtorovic on Thu Jun 23 05:20:27 2022
    On Thursday, June 23, 2022 at 6:32:11 AM UTC-4, Daniele Futtorovic wrote:
    On 21/06/2022 17:38, mike wrote:
    Hi,

    I have created a jar file, test-example.jar, and added under src/test/resources
    and now I want to make sure that when I run the testcase
    this jar file is loaded so I can access files in it. I am using java 11.

    Q1: How to load jar, in testcase, at runtime?
    Q2: How to access resource in jar. Resource resides in jar with the following path suites/tools/device/nc/testng2.xml

    br,

    //mike
    Normally, what you put under /src is what you want packaged (in a JAR,
    WAR, etc.).
    If you put a JAR there, and your sources are packaged as a JAR, you'll
    end up with JAR inside your JAR. Which I would say is definitely
    technically workable. I'm not sure whether it's a recommended practice
    or not.

    To load such a JAR file, you'd have to load it as a resource

    Thread.getThread().getContextClassLoader().getResource(NAME_OF_THE_JAR_FILE)

    op didn't say if they're trying to package a jar inside another jar or just build a war.
    That Thread command is definitely the way to read a resource, at least in a maven war project from the src/main/resources folder.
    If you're building a war, dependent jars should end up in WEB-INF/lib.
    If the jar is provided on the classpath, the context class loader should work. Normally files loaded as resources are not packaged inside a file (jar) wrapped in another file (jar/war).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Daniele Futtorovic@21:1/5 to e.d.pro...@gmail.com on Thu Jun 23 15:33:02 2022
    On 23/06/2022 14:20, e.d.pro...@gmail.com wrote:

    op didn't say if they're trying to package a jar inside another jar or just build a war.

    On 21/06/2022 17:38, mike wrote:
    Hi,

    I have created a jar file, test-example.jar, and added under
    src/test/resources

    --
    DF.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From e.d.programmer@gmail.com@21:1/5 to Daniele Futtorovic on Thu Jun 23 14:01:46 2022
    On Thursday, June 23, 2022 at 9:33:17 AM UTC-4, Daniele Futtorovic wrote:
    op didn't say if they're trying to package a jar inside another jar or just build a war.
    On 21/06/2022 17:38, mike wrote:
    Hi,

    I have created a jar file, test-example.jar, and added under
    src/test/resources
    --
    DF.
    sounds like test-example.jar is a jar file in the src/test/resources path, not what they're trying to build

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)