Migration icon indicating copy to clipboard operation
Migration copied to clipboard

Documentation update

Open rickgartner opened this issue 7 months ago • 1 comments

Documentation states for Linux "sdk install java 21.0.2-graal" but pom.xml has Java version 22. Compile fails. I resolved this by modifying pom.xml to Java version 21 or install java 22.0.1

Documentation needs updating to reflect the correct version of Java.

rickgartner avatar May 09 '25 17:05 rickgartner

@rickgartner

If you're trying to compile the project itself, here is what I recommend:

  • Use SDKMan to manage your tools
  • Install latest Graal JDK sdk install java 25.ea.21-graal
  • Install latest Maven sdk install maven 4.0.0-rc-3

I've been modifying the code today and had some frustrations with Graal, so I decided to change the POM file to something much simpler, which comes from an IntelliJ template that I created. Here is the current POM file for this project:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.simtechdata</groupId>
    <artifactId>Migrate</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <name>Migrate</name>
    <description>DHCP static mapping migration utility for OPNSense 24</description>

    <properties>
        <compatibility-arg/>
        <package.type/>
        <system-linker-arg/>
        <system-native-image-arg/>
        <mainClass>${groupId}.App</mainClass>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>22</maven.compiler.source>
        <maven.compiler.target>22</maven.compiler.target>
        <!--Dependencies-->
        <version-jackson-databind>2.19.0</version-jackson-databind>
        <version-jackson-dataformat-xml>2.19.0</version-jackson-dataformat-xml>
        <version-commons-io>2.19.0</version-commons-io>
        <!--Plugins-->
        <versions-maven-plugin>2.18.0</versions-maven-plugin>
        <version-maven-enforcer-plugin>3.5.0</version-maven-enforcer-plugin>
        <version-maven-assembly-plugin>3.7.1</version-maven-assembly-plugin>
        <version-native-maven-plugin>0.10.6</version-native-maven-plugin>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${version-jackson-databind}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${version-jackson-dataformat-xml}</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${version-commons-io}</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>version.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>META-INF/native-image/${groupId}/${project.name}/*.*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <!-- Maven Versions -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>${versions-maven-plugin}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>display-dependency-updates</goal>
                            <goal>display-plugin-updates</goal>
                            <goal>property-updates-report</goal>
                            <goal>dependency-updates-report</goal>
                            <goal>plugin-updates-report</goal>
                            <goal>update-properties</goal>
                            <goal>use-latest-versions</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--Maven Enforcer Plugin-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>${version-maven-enforcer-plugin}</version>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>4.0.0-rc-2</version>
                                </requireMavenVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Maven Assembly Plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${version-maven-assembly-plugin}</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>${mainClass}</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${name}</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>maven_central</id>
            <name>Maven Central</name>
            <url>https://repo.maven.apache.org/maven2/</url>
        </repository>
    </repositories>

    <profiles>
        <!--native profile-->
        <profile>
            <id>native</id>
            <build>
                <plugins>
                    <!-- GraalVM Native Maven Plugin -->
                    <plugin>
                        <groupId>org.graalvm.buildtools</groupId>
                        <artifactId>native-maven-plugin</artifactId>
                        <version>${version-native-maven-plugin}</version>
                        <extensions>true</extensions>
                        <executions>
                            <execution>
                                <id>build-native</id>
                            </execution>
                        </executions>
                        <configuration>
                            <target>${java.version}</target>
                            <imageName>${project.name}</imageName>
                            <mainClass>${mainClass}</mainClass>
                            <verbose>true</verbose>
                            <fallback>false</fallback>
                            <buildArgs>
                                <arg>-Djava.awt.headless=true</arg>
                                <arg>--no-fallback</arg>
                                <arg>--enable-preview</arg>
                                <arg>--enable-http</arg>
                                <arg>--enable-https</arg>
                                <arg>--initialize-at-build-time=org.sqlite.util.ProcessRunner</arg>
                                <arg>--enable-native-access=ALL-UNNAMED</arg>
                                <arg>-march=native</arg>
                                <arg>-H:+UnlockExperimentalVMOptions</arg>
                                <arg>-H:+ReportExceptionStackTraces</arg>
                                <arg>-H:ConfigurationFileDirectories=src/main/resources/META-INF/native-image/${groupId}/${project.name}}</arg>
                                <arg>-O3</arg>
                                <arg>-o ${basedir}/native-image/${project.name}</arg>
                            </buildArgs>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

If you create a folder in the project root called something like compile then drop these files in there:

paths

P=~/JetBrainsProjects/IntelliJIdea/Migrate  #<-- Change that to the path where the githib clone is on your drive
T=$P/target
G=$P/src/main/resources/META-INF/native-image/com.simtechdata/Migrate

dograal.sh

#!/bin/bash
source paths

mvn -f $P/pom.xml clean package

java -agentlib:native-image-agent=config-output-dir=$G -jar $T/Migrate-jar-with-dependencies.jar -V
java -agentlib:native-image-agent=config-merge-dir=$G -jar $T/Migrate-jar-with-dependencies.jar -g
java -agentlib:native-image-agent=config-merge-dir=$G -jar $T/Migrate-jar-with-dependencies.jar

native.sh

#!/bin/bash

cur=$(pwd)
JP=$(dirname "$cur")

mvn -f $JP/pom.xml clean -Pnative native:compile

run

chmod +x *.sh

Then, make sure you have a config.xml file in the same folder as all this stuff...

./dograal.sh
./native.sh

And it should compile for you...

EasyG0ing1 avatar May 10 '25 12:05 EasyG0ing1