diff --git a/VirtualComputer-Core/pom.xml b/VirtualComputer-Core/pom.xml index e9baa36..8d77754 100644 --- a/VirtualComputer-Core/pom.xml +++ b/VirtualComputer-Core/pom.xml @@ -37,14 +37,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - 9 - 9 - - @@ -52,6 +44,8 @@ org.virtualbox VirtualBox-MSCOM 6.1 + system + ${project.basedir}/../VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.jar com.aparapi diff --git a/VirtualComputerMSCOM/pom.xml b/VirtualComputerMSCOM/pom.xml index 70022bd..8327136 100644 --- a/VirtualComputerMSCOM/pom.xml +++ b/VirtualComputerMSCOM/pom.xml @@ -20,11 +20,22 @@ 6.1 true + system + ${project.basedir}/src/main/resources/Interop.VirtualBox.j4n.jar - net.sf.jacob-project - jacob - 1.19 + net.sf.jni4net + clr + 0.8.9.0 + system + ${project.basedir}/src/main/resources/jni4net.j-0.8.9.0.jar + + + io.github.NorbiPeti + VirtualComputer-Windows + 0.8.9.0 + system + ${project.basedir}/src/main/resources/VirtualComputerWindows.j4n.jar diff --git a/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/ISession.java b/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/ISession.java new file mode 100644 index 0000000..78c0bb4 --- /dev/null +++ b/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/ISession.java @@ -0,0 +1,77 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by jni4net. See http://jni4net.sourceforge.net/ +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +package org.virtualbox_6_1; + +@net.sf.jni4net.attributes.ClrInterface +public interface ISession { + + // + @net.sf.jni4net.attributes.ClrMethod("()Lorg/virtualbox_6_1/SessionState;") + org.virtualbox_6_1.SessionState getState_FixIt(); + + default org.virtualbox_6_1.SessionState getState() { + return SessionState.Locked; + } + + @net.sf.jni4net.attributes.ClrMethod("()Lorg/virtualbox_6_1/SessionType;") + org.virtualbox_6_1.SessionType getType_FixIt(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/String;") + java.lang.String getName(); + + @net.sf.jni4net.attributes.ClrMethod("(LSystem/String;)V") + void setName(java.lang.String aName); + + @net.sf.jni4net.attributes.ClrMethod("()Lorg/virtualbox_6_1/IMachine;") + org.virtualbox_6_1.IMachine getMachine(); + + @net.sf.jni4net.attributes.ClrMethod("()Lorg/virtualbox_6_1/IConsole;") + org.virtualbox_6_1.IConsole getConsole(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute1ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute2ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute3ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute4ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute5ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute6ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute7ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()LSystem/UInt32;") + int getInternalAndReservedAttribute8ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()V") + void unlockMachine(); + + @net.sf.jni4net.attributes.ClrMethod("()V") + void internalAndReservedMethod1ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()V") + void internalAndReservedMethod2ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()V") + void internalAndReservedMethod3ISession(); + + @net.sf.jni4net.attributes.ClrMethod("()V") + void internalAndReservedMethod4ISession(); + // +} diff --git a/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/SessionState.java b/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/SessionState.java new file mode 100644 index 0000000..2344f26 --- /dev/null +++ b/VirtualComputerMSCOM/src/main/java/org/virtualbox_6_1/SessionState.java @@ -0,0 +1,5 @@ +package org.virtualbox_6_1; + +public enum SessionState { + Locked +} diff --git a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/COMFrameBuffer.java b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/COMFrameBuffer.java index c9859b4..6b9464e 100644 --- a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/COMFrameBuffer.java +++ b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/COMFrameBuffer.java @@ -1,41 +1,44 @@ package sznp.virtualcomputer; import lombok.RequiredArgsConstructor; +import net.sf.jni4net.Ref; import org.virtualbox_6_1.BitmapFormat; -import org.virtualbox_6_1.FramebufferCapabilities; +import org.virtualbox_6_1.IFramebuffer; import org.virtualbox_6_1.IFramebufferOverlay; +import system.Array; import sznp.virtualcomputer.util.IMCFrameBuffer; +import virtualcomputerwindows.Exports; import java.util.Arrays; @RequiredArgsConstructor -public class COMFrameBuffer { +public class COMFrameBuffer implements IFramebuffer { private final IMCFrameBuffer frameBuffer; - public long getBitsPerPixel() { + public int getBitsPerPixel() { return 32; } - public long getBytesPerLine() { - return 640L; + public int getBytesPerLine() { + return 640; } - public long[] getCapabilities(long[] arg0) { + public Array getCapabilities_FixIt() { try { System.out.println("Capabilities queried"); - System.out.println("Capabilities: " + Arrays.toString(arg0)); - return new long[]{FramebufferCapabilities.UpdateImage.value()}; + //return new long[]{FramebufferCapabilities.UpdateImage.value()}; + return Array.CreateInstance(system.Type.GetType("System.Int32"), 0); } catch (Exception e) { e.printStackTrace(); - return new long[]{}; + return Array.CreateInstance(system.Type.GetType("System.Int32"), 0); } } - public long getHeight() { + public int getHeight() { return 480; } - public long getHeightReduction() { + public int getHeightReduction() { return 0; } @@ -43,15 +46,16 @@ public class COMFrameBuffer { return null; } - public long getPixelFormat() { - return BitmapFormat.BGRA.value(); + public BitmapFormat getPixelFormat_FixIt() { + //return BitmapFormat.BGRA.value(); + return null; } - public long getVisibleRegion(byte arg0, long arg1) { + public int getVisibleRegion(Ref arg0, int arg1) { return 0; } - public long getWidth() { + public int getWidth() { return 640; } @@ -59,23 +63,23 @@ public class COMFrameBuffer { return 0; // Zero means no win id } - public void notify3DEvent(long type, byte[] data) { - System.out.println("3D event! " + type + " - " + Arrays.toString(data)); + public void notify3DEvent_FixIt(int type, Array data) { + System.out.println("3D event! " + type + " - " + Arrays.toString(Exports.ConvertArrayByte(data))); } - public void notifyChange(long screenId, long xOrigin, long yOrigin, long width, long height) { + public void notifyChange(int screenId, int xOrigin, int yOrigin, int width, int height) { frameBuffer.notifyChange(screenId, xOrigin, yOrigin, width, height); } - public void notifyUpdate(long x, long y, long width, long height) { + public void notifyUpdate(int x, int y, int width, int height) { frameBuffer.notifyUpdate(x, y, width, height); } - public void notifyUpdateImage(long arg0, long arg1, long arg2, long arg3, byte[] arg4) { - frameBuffer.notifyUpdateImage(arg0, arg1, arg2, arg3, arg4); + public void notifyUpdateImage_FixIt(int arg0, int arg1, int arg2, int arg3, Array arg4) { + frameBuffer.notifyUpdateImage(arg0, arg1, arg2, arg3, Exports.ConvertArrayByte(arg4)); } - public void setVisibleRegion(byte arg0, long arg1) { + public void setVisibleRegion(Ref arg0, int arg1) { } /** @@ -87,11 +91,11 @@ public class COMFrameBuffer { * @param enmCmd The validated VBOXVHWACMD::enmCmd value from the command. * @param fromGuest Set when the command origins from the guest, clear if host. */ //https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp#L4645 - public void processVHWACommand(byte command, int enmCmd, boolean fromGuest) { + public void processVHWACommand(Ref command, int enmCmd, int fromGuest) { } - public boolean videoModeSupported(long arg0, long arg1, long arg2) { - return true; + public int videoModeSupported(int arg0, int arg1, int arg2) { + return 1; } } diff --git a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/EventHandler.java b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/EventHandler.java index 9e807e5..e206252 100644 --- a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/EventHandler.java +++ b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/EventHandler.java @@ -1,13 +1,13 @@ package sznp.virtualcomputer; import org.virtualbox_6_1.IEvent; -import sznp.virtualcomputer.util.COMObjectBase; +import org.virtualbox_6_1.IEventListener; import sznp.virtualcomputer.util.IEventHandler; /** * A Bukkit-like event system which calls the appropriate methods on an event. */ -public final class EventHandler extends COMObjectBase { +public final class EventHandler implements IEventListener { private final IEventHandler handler; private boolean enabled = true; @@ -20,6 +20,7 @@ public final class EventHandler extends COMObjectBase { this.handler = handler; } + @Override public final void handleEvent(IEvent iEvent) { if (!enabled) return; diff --git a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMObjectBase.java b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMObjectBase.java deleted file mode 100644 index 947df62..0000000 --- a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMObjectBase.java +++ /dev/null @@ -1,10 +0,0 @@ -package sznp.virtualcomputer.util; - -import com.jacob.com.Dispatch; -import com.jacob.com.Variant; - -public abstract class COMObjectBase extends Dispatch { - public COMObjectBase() { - super("clsid:{67099191-32E7-4F6C-85EE-422304C71B90}"); - } -} diff --git a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java index 98f7c52..0265146 100644 --- a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java +++ b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java @@ -1,52 +1,55 @@ package sznp.virtualcomputer.util; -import com.jacob.activeX.ActiveXComponent; -import com.jacob.com.*; import lombok.val; +import net.sf.jni4net.Out; import org.virtualbox_6_1.*; -import org.virtualbox_6_1.mscom.Helper; -import org.virtualbox_6_1.mscom.IUnknown; import sznp.virtualcomputer.COMFrameBuffer; import sznp.virtualcomputer.EventHandler; +import virtualcomputerwindows.Exports; import java.lang.reflect.InvocationTargetException; import java.util.List; public final class COMUtils { - private COMUtils() { - } + private COMUtils() { + } - //public static void registerListener(IEventSource source, IEventListener listener, VBoxEventType... types) { - public static org.virtualbox_6_1.IEventListener registerListener(IEventSource source, IEventHandler listener, List types) { - //new DispatchEvents(source.getTypedWrapped(), listener); - val ret = new org.virtualbox_6_1.IEventListener(new EventHandler(listener)); + //public static void registerListener(IEventSource source, IEventListener listener, VBoxEventType... types) { + public static IEventListener registerListener(IEventSource source, IEventHandler listener, List types) { + //new DispatchEvents(source.getTypedWrapped(), listener); + val ret = new EventHandler(listener); /*com.jacob.activeX.ActiveXComponent.createNewInstance("IEventListener"); new ActiveXComponent(""); source.registerListener(ret, types, true);*/ - //registerListener(source, new EventHandler(listener), types, true); - System.out.println("Testing listener..."); - ret.handleEvent(null); - System.out.println("Tested"); - return ret; - //return null; - } + //registerListener(source, new EventHandler(listener), types, true); + System.out.println("Testing listener..."); + ret.handleEvent(null); + System.out.println("Tested"); + return ret; + //return null; + } - @SuppressWarnings("unchecked") - public static T getEvent(IEvent event, Class cl) { - try { - val method = cl.getMethod("queryInterface", IUnknown.class); - return (T) method.invoke(null, event); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - return null; - } - } + @SuppressWarnings("unchecked") + public static T getEvent(IEvent event, Class cl) { + //val method = cl.getMethod("queryInterface", IUnknown.class); + //return (T) method.invoke(null, event); + return null; //TODO + } - public static IFramebuffer gimmeAFramebuffer(IMCFrameBuffer frameBuffer) { - return new IFramebuffer(new Variant(new COMFrameBuffer(frameBuffer)).getDispatch()); - } + public static IFramebuffer gimmeAFramebuffer(IMCFrameBuffer frameBuffer) { + return new COMFrameBuffer(frameBuffer); + } - public static void queryBitmapInfo(IDisplaySourceBitmap bitmap, long[] ptr, long[] w, long[] h, long[] bpp, long[] bpl, long[] pf) { - Dispatch.call(bitmap.getTypedWrapped(), "queryBitmapInfo", ptr, w, h, bpp, bpl, pf); - } + public static void queryBitmapInfo(IDisplaySourceBitmap bitmap, long[] ptr, long[] w, long[] h, long[] bpp, long[] bpl, long[] pf) { + Out wo = new Out<>(), ho = new Out<>(), bppo = new Out<>(), bplo = new Out<>(); + val pfo = new Out(); + val ptro = new Out(); + bitmap.queryBitmapInfo(ptro, wo, ho, bppo, bplo, pfo); + ptr[0] = ptro.getValue(); + w[0] = wo.getValue(); + h[0] = ho.getValue(); + bpp[0] = bppo.getValue(); + bpl[0] = bplo.getValue(); + pf[0] = Exports.ConvertEnum(pfo.getValue()); + } } diff --git a/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.dll b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.dll new file mode 100644 index 0000000..576c982 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.dll differ diff --git a/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.dll b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.dll new file mode 100644 index 0000000..2a1e3ea Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.dll differ diff --git a/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.jar b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.jar new file mode 100644 index 0000000..4311b23 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/Interop.VirtualBox.j4n.jar differ diff --git a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll new file mode 100644 index 0000000..69724e7 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll differ diff --git a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll new file mode 100644 index 0000000..998b4b6 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll differ diff --git a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.jar b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.jar new file mode 100644 index 0000000..34316b2 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.jar differ diff --git a/VirtualComputerMSCOM/src/main/resources/jni4net.j-0.8.9.0.jar b/VirtualComputerMSCOM/src/main/resources/jni4net.j-0.8.9.0.jar new file mode 100644 index 0000000..6819919 Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/jni4net.j-0.8.9.0.jar differ diff --git a/VirtualComputerMSCOM/src/main/resources/jni4net.n-0.8.9.0.dll b/VirtualComputerMSCOM/src/main/resources/jni4net.n-0.8.9.0.dll new file mode 100644 index 0000000..1dea57f Binary files /dev/null and b/VirtualComputerMSCOM/src/main/resources/jni4net.n-0.8.9.0.dll differ diff --git a/VirtualComputerWindows/VirtualComputerWindows/Exports.cs b/VirtualComputerWindows/VirtualComputerWindows/Exports.cs index b29a80e..fbc6fea 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/Exports.cs +++ b/VirtualComputerWindows/VirtualComputerWindows/Exports.cs @@ -17,7 +17,7 @@ namespace VirtualComputerWindows private static VirtualBoxClient vbc; - public static async Task Init() => await Task.Run(() => + public static void Init() { try { @@ -27,7 +27,7 @@ namespace VirtualComputerWindows //https://www.virtualbox.org/svn/vbox/trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp vbc = new VirtualBoxClientClass(); var vbox = vbc.VirtualBox; - RTR3InitExe(0, "", 0); + //RTR3InitExe(0, "", 0); var ses = vbc.Session; var machine = vbox.Machines.GetValue(0) as IMachine; ses.Name = "minecraft"; @@ -38,22 +38,39 @@ namespace VirtualComputerWindows machine = ses.Machine; Console.WriteLine("Powering up..."); ses.Console.PowerUp().WaitForCompletion(10000); - Console.WriteLine("Framebuffer attach"); - ses.Console.Display.AttachFramebuffer(0, new VBFB(ses.Console.Display)); - return vbox; } catch(Exception e) { Console.WriteLine(e); Console.ReadLine(); - return null; } - }); + } public static void Main() { Init(); Console.ReadLine(); } + + public static int[] ConvertArrayInt(Array array) + { + return (int[]) array; + } + + public static byte[] ConvertArrayByte(Array array) + { + return (byte[]) array; + } + + public static uint[] ConvertArrayUint(Array array) + { + return (uint[]) array; + } + + public static int ConvertEnum(object someEnum) + { + BitmapFormat.BitmapFormat_RGBA; + return (int) someEnum; + } } } diff --git a/VirtualComputerWindows/VirtualComputerWindows/VBFB.cs b/VirtualComputerWindows/VirtualComputerWindows/VBFB.cs deleted file mode 100644 index 7999b81..0000000 --- a/VirtualComputerWindows/VirtualComputerWindows/VBFB.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using VirtualBox; - -namespace VirtualComputerWindows -{ - internal class VBFB : IFramebuffer - { - private IDisplay display; - - public VBFB(IDisplay display) - { - this.display = display; - } - - public void NotifyUpdate(uint aX, uint aY, uint aWidth, uint aHeight) - { - Console.WriteLine("Update: " + aX + " " + aY + " " + aWidth + " " + aHeight); - } - - public void NotifyUpdateImage(uint aX, uint aY, uint aWidth, uint aHeight, Array aImage) - { - Console.WriteLine("UpdateImage: " + aX + " " + aY + " " + aWidth + " " + aHeight); - } - - public void NotifyChange(uint aScreenId, uint aXOrigin, uint aYOrigin, uint aWidth, uint aHeight) - { - Console.WriteLine("Change: " + aXOrigin + " " + aYOrigin + " " + aWidth + " " + aHeight); - display.QuerySourceBitmap(0, out var isd); - var addr = new IntPtr(); - isd.QueryBitmapInfo(addr, out var w, out var h, out var bpp, out var bpl, out var bf); - Console.WriteLine("Bitmap info: " + addr + " " + w + " " + h + " " + bpp + " " + bpl + " " + bf); - } - - public int VideoModeSupported(uint aWidth, uint aHeight, uint aBpp) - { - return 1; - } - - public uint GetVisibleRegion(ref byte aRectangles, uint aCount) - { - return aCount; - } - - public void SetVisibleRegion(ref byte aRectangles, uint aCount) - { - } - - public void ProcessVHWACommand(ref byte aCommand, int aEnmCmd, int aFromGuest) - { - } - - public void Notify3DEvent(uint aType, Array aData) - { - } - - public uint Width => 640; - - public uint Height => 480; - - public uint BitsPerPixel => 32; - - public uint BytesPerLine => 640 * 4; - - public BitmapFormat PixelFormat => BitmapFormat.BitmapFormat_BGRA; - - public uint HeightReduction => 0; - - public IFramebufferOverlay Overlay => null; - - public long WinId => 0; - - //public Array Capabilities => new[] { FramebufferCapabilities.FramebufferCapabilities_UpdateImage }; - public Array Capabilities => new FramebufferCapabilities[] { }; - } -} \ No newline at end of file diff --git a/VirtualComputerWindows/VirtualComputerWindows/VirtualComputerWindows.csproj b/VirtualComputerWindows/VirtualComputerWindows/VirtualComputerWindows.csproj index 7dae326..2197e86 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/VirtualComputerWindows.csproj +++ b/VirtualComputerWindows/VirtualComputerWindows/VirtualComputerWindows.csproj @@ -9,7 +9,7 @@ Properties VirtualComputerWindows VirtualComputerWindows - v4.6.2 + v4.6.1 512 VirtualComputerWindows @@ -93,7 +93,6 @@ - diff --git a/VirtualComputerWindows/VirtualComputerWindows/app.config b/VirtualComputerWindows/VirtualComputerWindows/app.config index 52260af..e0f92b1 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/app.config +++ b/VirtualComputerWindows/VirtualComputerWindows/app.config @@ -1,15 +1,15 @@ - + - - + + - - + + - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index 8340ba2..1098643 100644 --- a/pom.xml +++ b/pom.xml @@ -8,9 +8,7 @@ VirtualComputer 2.1-SNAPSHOT - VirtualComputerXPCOM VirtualComputer-Core - VirtualComputerMSCOM pom @@ -127,4 +125,18 @@ + + + XPCOM + + VirtualComputerXPCOM + + + + MSCOM + + VirtualComputerMSCOM + + + \ No newline at end of file diff --git a/repo/net/sf/jacob-project/jacob/maven-metadata-local.xml b/repo/net/sf/jacob-project/jacob/maven-metadata-local.xml index 223f446..29d7a8f 100644 --- a/repo/net/sf/jacob-project/jacob/maven-metadata-local.xml +++ b/repo/net/sf/jacob-project/jacob/maven-metadata-local.xml @@ -7,6 +7,6 @@ 1.19 - 20200811112851 + 20200811224130