nodes = JarUtils.loadClasses(jarFile); Map out = JarUtils.loadNonClassEntries(jarFile); Map mappings = new HashMap(); mappings.put("me/example/ExampleClass", "me/example/ExampleRenamed"); out.putAll(process(nodes, mappings)); JarUtils.saveAsJar(out, "Input-new.jar"); } static Map process(Map nodes, Map mappings) { Map out = new HashMap(); Remapper mapper = new SimpleRemapper(mappings); for (ClassNode cn : nodes.values()) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor remapper = new ClassRemapper(cw, mapper); cn.accept(remapper); out.put(mappings.containsKey(cn.name) ? mappings.get(cn.name) : cn.name, cw.toByteArray()); } retur"> nodes = JarUtils.loadClasses(jarFile); Map out = JarUtils.loadNonClassEntries(jarFile); Map mappings = new HashMap(); mappings.put("me/example/ExampleClass", "me/example/ExampleRenamed"); out.putAll(process(nodes, mappings)); JarUtils.saveAsJar(out, "Input-new.jar"); } static Map process(Map nodes, Map mappings) { Map out = new HashMap(); Remapper mapper = new SimpleRemapper(mappings); for (ClassNode cn : nodes.values()) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor remapper = new ClassRemapper(cw, mapper); cn.accept(remapper); out.put(mappings.containsKey(cn.name) ? mappings.get(cn.name) : cn.name, cw.toByteArray()); } retur"> nodes = JarUtils.loadClasses(jarFile); Map out = JarUtils.loadNonClassEntries(jarFile); Map mappings = new HashMap(); mappings.put("me/example/ExampleClass", "me/example/ExampleRenamed"); out.putAll(process(nodes, mappings)); JarUtils.saveAsJar(out, "Input-new.jar"); } static Map process(Map nodes, Map mappings) { Map out = new HashMap(); Remapper mapper = new SimpleRemapper(mappings); for (ClassNode cn : nodes.values()) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor remapper = new ClassRemapper(cw, mapper); cn.accept(remapper); out.put(mappings.containsKey(cn.name) ? mappings.get(cn.name) : cn.name, cw.toByteArray()); } retur">
public static void main(String[] args) throws Exception {
    File jarFile = new File("Input.jar");
    Map<String, ClassNode> nodes = JarUtils.loadClasses(jarFile);
    
    Map<String, byte[]> out = JarUtils.loadNonClassEntries(jarFile);
    Map<String, String> mappings = new HashMap<String, String>();
    mappings.put("me/example/ExampleClass", "me/example/ExampleRenamed");
    out.putAll(process(nodes, mappings));
    JarUtils.saveAsJar(out, "Input-new.jar");
}

static Map<String, byte[]> process(Map<String, ClassNode> nodes, Map<String, String> mappings) {
    Map<String, byte[]> out = new HashMap<String, byte[]>();
    Remapper mapper = new SimpleRemapper(mappings);
    for (ClassNode cn : nodes.values()) {
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
        ClassVisitor remapper = new ClassRemapper(cw, mapper);
        cn.accept(remapper);
        out.put(mappings.containsKey(cn.name) ? mappings.get(cn.name) : cn.name, cw.toByteArray());
    }
    return out;
}

SimpleRemapper is an existing class in the ASM library. However it only allows for class names to be changed. If you wish to rename fields and methods you should create your own implemenation of the Remapper class.