JAR Probe Assembly

Since 3.5.0.

Automatic Defaults

In CDI mode, Pax Exam by default uses the test class path, creating a bean archive for each class path element containing a META-INF/beans.xml descriptor.

Manually Assembling a JAR Probe

Sometimes, it is not desirable to have all classes on the test class path to be treated as beans. In this case, you can create a JAR probe which contains an explicit subset of classes and resources. Pax Exam creates a JAR from these resources on the fly, builds an URL class loader for this JAR and sets this loader as thread context class loader before starting the CDI container.

Using a configuration method and a jarProbe() option with additional arguments, you can assemble the JAR probe from scratch:

package org.ops4j.pax.exam.regression.cdi.probe.calc.test;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.ops4j.pax.exam.CoreOptions.jarProbe;
import static org.ops4j.pax.exam.CoreOptions.options;

import javax.inject.Inject;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;

public class AdditionTest {
    private Calculator calculator;
    public Option[] config() {
        return options(jarProbe()
            .classes(Addition.class, BinaryOperation.class, Calculator.class, CalculatorImpl.class)
    public void add() {
        assertThat(calculator.operate(2, 3), is(5));

The above example creates a JAR containing nothing but four classes and a META-INF/beans.xml resource with the given content. 

jarProbe() Arguments


  • Adds classes to WEB-INF/lib.

    classes(Vanilla.class, Chocolate.class)


  • Adds the given resource from the class path to the WAR in META-INF/.

    metaInfResource("src/test/resources/calc/foo") // copies the given resource to META-INF/foo


  • Adds the given resources from the current class path to the JAR, using the same relative path.

     resources("com/resources("com/acme/Messages.properties", "com/acme/Messages_de.properties")