How can I set the java.library.path used by eclipse from a POM?
Asked Answered
A

2

6

I'm using maven to define my projects. One of my dependencies requires a native DLL at runtime, and consequently it's needed in tests and for debugging. The native DLL is available at a known location. I want a solution that I can check in once and will work for all developers without manual setup by each dev.

I know I can set the java.libary.path manually in "run configurations", which will allow it to find the native DLL, but this requires manual setup for each developer.

I know I can also set the java.library.path for a given project dependency, but again this is local to a particular developer.

Finally I know I can set the surefire plugin to specify the java.library.path, but this is only useful for tests triggered via maven - so it's great for our build server, but doesn't help devs using the JUnit runner in eclipse, or wanting to debug or run code directly from eclipse.

Is there a way out?

Adopted answered 7/3, 2013 at 12:19 Comment(0)
A
5

I've found that the eclipse m2e connector that goes with the maven-nativedependencies-plugin seems to fix this.

According to the mavennatives docs:

Since version 0.0.7 of the maven-nativedependencies-plugin if you have m2eclipse installed and the nativedependencies plugin configured the unpacking of natives will run automatically, you don't need the eclipse plugin to unpack them. However in order to setup the java.library.path environment variable in eclipse you will have to do it either manually or automatically using the eclipse plugin.

This Eclipse plugin is an extension to m2eclipse, it detects if you have the maven plugin configured, and if you do it executes the unpacking of natives, and configures the Native Library Location.

If you import a maven project that has the mavennatives plugin configured, and you have the m2eclipse integration plugin, on import the natives will be extracted, also when performing a clean from eclipse the natives will be extracted.

So, if you use both these tools, using native dependencies requires no manual configuration, other than whats in the pom, just run your app and it works.

If I have the connector installed, and add mavennatives to my POM, then reload the pom (right-click on project in package explorer > maven > update project), the "Native library location" of the project is populated automatically (to see this, right click on project > properties > java build path > libraries > native library location)

enter image description here

This seems to work for debugging, JUnit runner, etc.

It does require that every developer install the plugin, which is manual (as manual as installing eclipse); however, at least once installed once it will work for any/all native depdendencies configured for mavennatives via a POM.

Adopted answered 7/3, 2013 at 15:59 Comment(0)
R
2

The Properties Maven Plugin may help you passing the system properties by using properties:set-system-properties to set system properties.

The example should be look like the following: -

<properties>
    <java.library.path>some/path</java.library.path>
</properties>

I hope this may help.

Rubi answered 7/3, 2013 at 12:41 Comment(1)
I don't think it helps. I already have some properties in my POM. The problem is getting eclipse, or the JUnit runner, to be aware of them. The doc you link for set-system-properties states "Requires a Maven 2.0 project to be executed." - I don't think this is happening while the JUnit runner is executing.Adopted

© 2022 - 2024 — McMap. All rights reserved.