Using ResourceBundle and jar files with ant

32 views Asked by At

I'm trying to compile an old java application written for java 6. It is a java application with ant. This is the part to create the jar application:

<target name="dist" depends="compile" description="generate the distribution">
    <jar destfile="${DESTFILE}" basedir="${basedir}/src">
        <exclude name="**/*.java"/>
    </jar>
    <jar destfile="${DESTFILE}" basedir="${BUILD}" update="true">
        <manifest>
            <attribute name="Main-Class" value="${Main-Class}"/>
            <attribute name="SplashScreen-Image" value="${SplashScreen-Image}"/>
            <attribute name="Class-Path" value="${Class-Path}"/>
        </manifest>
    </jar>
</target>

Class-Path property is:

<property name="Class-Path" value="nttcad/nttcad.jar nttcad/common.jar"/>
nttcad/common.jar"/>

The jar application (cad.jar) has no code: it use the code located into the libraries nttcad/nttcad.jar and nttcad/common.jar.

After many modifications the code is compiled succesfully, but when running an excepion is thrown:

$ /opt/jdk-19/bin/java -jar "cad.jar"
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name nttcad/nttcad/resources/RB, locale it_IT
    at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2062)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1700)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1603)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1558)
    at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:864)
    at nttcad.common.util.RBObject.&lt;init>(RBObject.java:16)
    at nttcad.nttcad.resources.RB.msg(RB.java:13)
    at nttcad.nttcad.main.About.show(About.java:87)
    at nttcad.nttcad.main.MainListener.createJFrame(MainListener.java:62)
    at nttcad.nttcad.Main.createJFrame(Main.java:115)
    at nttcad.nttcad.Main.createJFrame(Main.java:105)
    at nttcad.nttcad.Main.main(Main.java:31)
Caused by: java.lang.NoClassDefFoundError: IllegalName: nttcad/nttcad/resources/RB
    at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:887)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1011)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.util.ResourceBundle$Control.newBundle0(ResourceBundle.java:3187)
    at java.base/java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:3168)
    at java.base/java.util.ResourceBundle.loadBundle(ResourceBundle.java:2001)
    at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1787)
    at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1739)
    at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1739)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1673)
    ... 10 more

The resource bundle is present:

nttcad/nttcad/resources/RB.properties nttcad/nttcad/resources/RB_it.properties

with a class for using resource bundle:

nttcad/nttcad/resources/RB.java

public class RB {

public static String msg(String key, Object ... arguments)
{
    if (s_rb==null)
        s_rb = new RBObject("nttcad/nttcad/resources/RB");
    return s_rb.msg(key, arguments);
}



private static RBObject s_rb = null;
}

The class RBObject located in common.jar has a constructor that create the resource bundle with the specified basename: the exception is thrown on that line:

public class RBObject {

public RBObject(String baseName)
{
    m_resourceBundle = ResourceBundle.getBundle(baseName);
}

...

Can anyone help me?

0

There are 0 answers