Question

So, i have a lot of projects based on java. It uses a lot of native libraries. All of them(projects/libraries) are in the same repository. And of corse for each OS are different dlls/jars The idea is to change which of them would be import according to OS. So is it possible without using Maven,Gradle.. e.t.c? I think it would be look like using c++ preprocessor..

UPT Sorry for misinformation, We`r using Ant.. So would be nice to know is any solution with it?

Was it helpful?

Solution 2

The ideal job is to use Maven to define all dependencies that you need for all operating systems. So your project will contain all the necessary libs for each operating system. And for using libs in code dynamically, you detect the os programmatically with the instruction :

  System.getProperty("os.name")

And you define a switch loop or an "if series" for example of libs invocation.
Here is an example that you can edit:

public class OSValidator {

private static String OS = System.getProperty("os.name").toLowerCase();

public static void main(String[] args) {

    System.out.println(OS);

    if (isWindows()) {
        System.out.println("This is Windows");
    } else if (isMac()) {
        System.out.println("This is Mac");
    } else if (isUnix()) {
        System.out.println("This is Unix or Linux");
    } else if (isSolaris()) {
        System.out.println("This is Solaris");
    } else {
        System.out.println("Your OS is not support!!");
    }
}

public static boolean isWindows() {
    return (OS.indexOf("win") >= 0);
}

public static boolean isMac() {
    return (OS.indexOf("mac") >= 0);
}

public static boolean isUnix() {
    return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 );
}

public static boolean isSolaris() {
    return (OS.indexOf("sunos") >= 0);
}

}

OTHER TIPS

The whole point of having build tools is that we do not have to take care of the various dependencies on our own. So I would still suggest you have a look at Maven build profiles.

For example

<profiles>
<profile>
<activation>
  <os>
    <name>Windows XP</name>
    <family>Windows</family>
    <arch>x86</arch>
    <version>5.1.2600</version>
  </os>
</activation>
...
</profile>
</profiles>

Also do have a look at the following http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top