ikvmnet / ikvm

A Java Virtual Machine and Bytecode-to-IL Converter for .NET
Other
1.24k stars 116 forks source link

Apache FOP.jar to dll #493

Closed shankargv87 closed 6 months ago

shankargv87 commented 6 months ago

I'm trying to convert fop jar to dll using IKVM 8.7.5. Below are the dependency jar files.

"\build\fop-core-2.9.jar" "\build\fop-events-2.9.jar" "\build\fop-util-2.9.jar" "\lib\xmlgraphics-commons-2.9.jar" "\lib\xml-apis-ext-1.3.04.jar" "\lib\xml-apis-1.4.01.jar" "\lib\fontbox-2.0.27.jar" "\lib\commons-logging-1.0.4.jar" "\lib\commons-io-2.11.0.jar" "\lib\batik-xml-1.17.jar" "\lib\batik-util-1.17.jar" "\lib\batik-transcoder-1.17.jar" "\lib\batik-svggen-1.17.jar" "\lib\batik-svg-dom-1.17.jar" "\lib\batik-shared-resources-1.17.jar" "\lib\batik-script-1.17.jar" "\lib\batik-parser-1.17.jar" "\lib\batik-i18n-1.17.jar" "\lib\batik-gvt-1.17.jar" "\lib\batik-extension-1.17.jar" "\lib\batik-ext-1.17.jar" "\lib\batik-dom-1.17.jar" "\lib\batik-css-1.17.jar" "\lib\batik-constants-1.17.jar" "\lib\batik-codec-1.17.jar" "\lib\batik-bridge-1.17.jar" "\lib\batik-awt-util-1.17.jar" "\lib\batik-anim-1.17.jar"

I followed the instructions from link https://github.com/ikvmnet/ikvm. Below is the IkvmReference I added in the project file. When I build the application, it is creating separate dlls for each dependency. I'm expecting a single fop.dll with all the dependency dlls included.

<ItemGroup> <IkvmReference Include="FOP\batik-anim-1.17.jar" /> <IkvmReference Include="FOP\batik-awt-util-1.17.jar" /> <IkvmReference Include="FOP\batik-bridge-1.17.jar" /> <IkvmReference Include="FOP\batik-codec-1.17.jar" /> <IkvmReference Include="FOP\batik-constants-1.17.jar" /> <IkvmReference Include="FOP\batik-css-1.17.jar" /> <IkvmReference Include="FOP\batik-dom-1.17.jar" /> <IkvmReference Include="FOP\batik-ext-1.17.jar" /> <IkvmReference Include="FOP\batik-extension-1.17.jar" /> <IkvmReference Include="FOP\batik-gvt-1.17.jar" /> <IkvmReference Include="FOP\batik-i18n-1.17.jar" /> <IkvmReference Include="FOP\batik-parser-1.17.jar" /> <IkvmReference Include="FOP\batik-script-1.17.jar" /> <IkvmReference Include="FOP\batik-shared-resources-1.17.jar" /> <IkvmReference Include="FOP\batik-svg-dom-1.17.jar" /> <IkvmReference Include="FOP\batik-svggen-1.17.jar" /> <IkvmReference Include="FOP\batik-transcoder-1.17.jar" /> <IkvmReference Include="FOP\batik-util-1.17.jar" /> <IkvmReference Include="FOP\batik-xml-1.17.jar" /> <IkvmReference Include="FOP\commons-io-2.11.0.jar" /> <IkvmReference Include="FOP\commons-logging-1.0.4.jar" /> <IkvmReference Include="FOP\fontbox-2.0.27.jar" /> <IkvmReference Include="FOP\fop-core-2.9.jar" /> <IkvmReference Include="FOP\fop-events-2.9.jar" /> <IkvmReference Include="FOP\fop-util-2.9.jar" /> <IkvmReference Include="FOP\xml-apis-1.4.01.jar" /> <IkvmReference Include="FOP\xml-apis-ext-1.3.04.jar" /> <IkvmReference Include="FOP\xmlgraphics-commons-2.9.jar" /> <IkvmReference Include="FOP\fop-2.9.jar"> <Compile>FOP\batik-anim-1.17.jar;FOP\batik-awt-util-1.17.jar;FOP\batik-bridge-1.17.jar;FOP\batik-codec-1.17.jar;FOP\batik-constants-1.17.jar;FOP\batik-css-1.17.jar;FOP\batik-dom-1.17.jar;FOP\batik-ext-1.17.jar;FOP\batik-extension-1.17.jar;FOP\batik-gvt-1.17.jar;FOP\batik-i18n-1.17.jar;FOP\batik-parser-1.17.jar;FOP\batik-script-1.17.jar;FOP\batik-shared-resources-1.17.jar;FOP\batik-svg-dom-1.17.jar;FOP\batik-svggen-1.17.jar;FOP\batik-transcoder-1.17.jar;FOP\batik-util-1.17.jar;FOP\batik-xml-1.17.jar;FOP\commons-io-2.11.0.jar;FOP\commons-logging-1.0.4.jar;FOP\fontbox-2.0.27.jar;FOP\fop-core-2.9.jar;FOP\fop-events-2.9.jar;FOP\fop-util-2.9.jar;FOP\xml-apis-1.4.01.jar;FOP\xml-apis-ext-1.3.04.jar;FOP\xmlgraphics-commons-2.9.jar</Compile> <References>FOP\batik-anim-1.17.jar;FOP\batik-awt-util-1.17.jar;FOP\batik-bridge-1.17.jar;FOP\batik-codec-1.17.jar;FOP\batik-constants-1.17.jar;FOP\batik-css-1.17.jar;FOP\batik-dom-1.17.jar;FOP\batik-ext-1.17.jar;FOP\batik-extension-1.17.jar;FOP\batik-gvt-1.17.jar;FOP\batik-i18n-1.17.jar;FOP\batik-parser-1.17.jar;FOP\batik-script-1.17.jar;FOP\batik-shared-resources-1.17.jar;FOP\batik-svg-dom-1.17.jar;FOP\batik-svggen-1.17.jar;FOP\batik-transcoder-1.17.jar;FOP\batik-util-1.17.jar;FOP\batik-xml-1.17.jar;FOP\commons-io-2.11.0.jar;FOP\commons-logging-1.0.4.jar;FOP\fontbox-2.0.27.jar;FOP\fop-core-2.9.jar;FOP\fop-events-2.9.jar;FOP\fop-util-2.9.jar;FOP\xml-apis-1.4.01.jar;FOP\xml-apis-ext-1.3.04.jar;FOP\xmlgraphics-commons-2.9.jar</References> </IkvmReference> </ItemGroup>

GeorgeS2019 commented 6 months ago

@shankargv87

What was the result?

shankargv87 commented 6 months ago

@GeorgeS2019

After building, it created DLLs for each dependency. I'm expecting a single fop.dll with all the dependencies included, so I don't need to refer to all the dependency DLLs in my project.

image

wasabii commented 6 months ago

If you want multiple Java resources combined into one assembly using IkvmReference, they should be specified within a single IkvmReference. I believe this is pretty well documented in the README.md, where it lists the various Metadata properties of IkvmReference, and their various allowances.

Compile | A semi-colon separated list of Java class path items to compile into the assembly. By default this value is the Identity of the item, if the identity of the item is an existing JAR file or directory (not yet supported). MSBuild globs are supported to reference multiple JAR or .class files.

GeorgeS2019 commented 6 months ago

@wasabii

He did that but NO single dll?

He could have missed something.

<Compile>FOP\batik-anim-1.17.jar;FOP\batik-awt-util-1.17.jar;FOP\batik-bridge-1.17.jar;FOP\batik-codec-1.17.jar;FOP\batik-constants-1.17.jar;FOP\batik-css-1.17.jar;FOP\batik-dom-1.17.jar;FOP\batik-ext-1.17.jar;FOP\batik-extension-1.17.jar;FOP\batik-gvt-1.17.jar;FOP\batik-i18n-1.17.jar;FOP\batik-parser-1.17.jar;FOP\batik-script-1.17.jar;FOP\batik-shared-resources-1.17.jar;FOP\batik-svg-dom-1.17.jar;FOP\batik-svggen-1.17.jar;FOP\batik-transcoder-1.17.jar;FOP\batik-util-1.17.jar;FOP\batik-xml-1.17.jar;FOP\commons-io-2.11.0.jar;FOP\commons-logging-1.0.4.jar;FOP\fontbox-2.0.27.jar;FOP\fop-core-2.9.jar;FOP\fop-events-2.9.jar;FOP\fop-util-2.9.jar;FOP\xml-apis-1.4.01.jar;FOP\xml-apis-ext-1.3.04.jar;FOP\xmlgraphics-commons-2.9.jar</Compile>

@shankargv87

It is best you provide more information (e.g. the csproj), not sure where you go wrong

shankargv87 commented 6 months ago

@GeorgeS2019

I attached my sample project.

IkvmFop.zip

GeorgeS2019 commented 6 months ago

@shankargv87 The file is not downloadable

Just the csproj file will do

shankargv87 commented 6 months ago

@GeorgeS2019

I attached my csproj file

IkvmFop.csproj.zip

GeorgeS2019 commented 6 months ago

It seems You are missing the crucial one. Now I have gathered the information in one place for further discussion. Hopefully Jeorome could guide U.

image

image

image

wasabii commented 6 months ago

I count like 20 IkvmReferences, which will produce like 20 assemblies. Again, a single IkvmReference produces a single assembly.

AssemblyName is largely irrelevent to the question asked, though might be relevant later if you want to customize the produced assembly name.

shankargv87 commented 6 months ago

I removed the dependency IkvmReference elements and kept only the IkvmReference for fop-2.9.jar and included the dependency jars in Compile element. Now I'm getting the dependencies combined into one assembly.

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup>

<ItemGroup> <PackageReference Include="IKVM" Version="8.7.5" /> <PackageReference Include="IKVM.Image.JRE" Version="8.7.5" /> </ItemGroup> <ItemGroup> <IkvmReference Include="FOP\fop-2.9.jar"> <Compile>FOP\batik-anim-1.17.jar;FOP\batik-awt-util-1.17.jar;FOP\batik-bridge-1.17.jar;FOP\batik-codec-1.17.jar;FOP\batik-constants-1.17.jar;FOP\batik-css-1.17.jar;FOP\batik-dom-1.17.jar;FOP\batik-ext-1.17.jar;FOP\batik-extension-1.17.jar;FOP\batik-gvt-1.17.jar;FOP\batik-i18n-1.17.jar;FOP\batik-parser-1.17.jar;FOP\batik-script-1.17.jar;FOP\batik-shared-resources-1.17.jar;FOP\batik-svg-dom-1.17.jar;FOP\batik-svggen-1.17.jar;FOP\batik-transcoder-1.17.jar;FOP\batik-util-1.17.jar;FOP\batik-xml-1.17.jar;FOP\commons-io-2.11.0.jar;FOP\commons-logging-1.0.4.jar;FOP\fontbox-2.0.27.jar;FOP\fop-core-2.9.jar;FOP\fop-events-2.9.jar;FOP\fop-util-2.9.jar;FOP\xml-apis-1.4.01.jar;FOP\xml-apis-ext-1.3.04.jar;FOP\xmlgraphics-commons-2.9.jar</Compile> </IkvmReference> </ItemGroup> </Project>

Thank you @GeorgeS2019 and @wasabii

GeorgeS2019 commented 6 months ago

@shankargv87

AssemblyName is largely irrelevent to the question asked, though might be relevant later if you want to customize the produced assembly name.

Have you figured out why it is relevant later?

GeorgeS2019 commented 6 months ago

@shankargv87

have you seen this post, it seems to work with fop-core https://github.com/sorcerdon/FOP.NetCore/issues/1

shankargv87 commented 6 months ago

@shankargv87

AssemblyName is largely irrelevent to the question asked, though might be relevant later if you want to customize the produced assembly name.

Have you figured out why it is relevant later?

@GeorgeS2019, yes.

GeorgeS2019 commented 6 months ago

@shankargv87

Now you have one FOP.dll, do you still need ikvm.maven?

shankargv87 commented 6 months ago

@shankargv87

Now you have one FOP.dll, do you still need ikvm.maven?

@GeorgeS2019

No, but I'm going to try ikvm.maven to see how it works.