You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Jon Kristensen <in...@jonkristensen.com> on 2010/04/18 14:38:09 UTC
Native library files
Hello people!
I need some kind of native library support in m2eclipse.
Maven is compiling and packaging my project nicely but in order to let
m2eclipse handle the dependency management and run my application from
within Eclipse I need the so/dll etc files to be put on the classpath
and possibly also java.library.path to be set.
Does maven deal with native library files in any special way? Also, do
you have any suggestions on how this feature should work?
Thank you in advance!
Warm regards,
--
Jon Kristensen <in...@jonkristensen.com>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: Native library files
Posted by Andrew Hughes <ah...@gmail.com>.
Off the top of my end the Eclipse "run configuration" should set
-Djava.library.path BEFORE it get's to m2eclipse/maven. Same as it would do
for a non maven run configuration. So look at the options under the eclipse
run configurations :)
On Thu, Apr 22, 2010 at 4:41 AM, Jon Kristensen <in...@jonkristensen.com>wrote:
> Hi!
>
> That helped me a lot! I have realized that the problem was neither in
> Maven or in m2eclipse. I assumed a native library on the classpath would
> be loadable by System.loadLibrary(). I now extract the libraries in the
> target/natives directory by using the maven-dependency-plugin:
>
> <plugin>
> <inherited>true</inherited>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-dependency-plugin</artifactId>
> <executions>
> <execution>
> <id>unpack</id>
> <phase>compile</phase>
> <goals>
> <goal>unpack</goal>
> </goals>
> <configuration>
> <artifactItems>
> <artifactItem>
> <groupId>org.lwjgl</groupId>
>
> <artifactId>lwjgl-linux-64</artifactId>
> <version>2.4.2</version>
>
> <classifier>natives</classifier>
> <type>jar</type>
> <overWrite>true</overWrite>
>
> <outputDirectory>target/natives</outputDirectory>
>
> <includes>*.so,*.dylib,*.dll</includes>
> </artifactItem>
> <artifactItem>
>
> <groupId>net.java.games</groupId>
>
> <artifactId>jinput</artifactId>
> <version>2.0.1</version>
>
> <classifier>linux-natives</classifier>
> <type>jar</type>
> <overWrite>true</overWrite>
>
> <outputDirectory>target/natives</outputDirectory>
>
> <includes>*.so,*.dylib,*.dll</includes>
> </artifactItem>
> </artifactItems>
> </configuration>
> </execution>
> </executions>
> </plugin>
>
> The only problem now is setting java.library.path as an m2eclipse
> setting somehow.
>
> Thanks so very much for your help!
>
> /Jon
>
> On Tue, 2010-04-20 at 21:24 +0930, Andrew Hughes wrote:
> > I'm no expert but I'll try to help.
> >
> > The big question is how are you running your application, is there a
> > specific maven goal/plugin you can speak of? If this is in the same JVM
> as
> > maven then you'll need to kick maven off with an extra command line
> > argument. If maven fork's the execution off to a system exec process then
> > it'll be on a different jvm.
> >
> > But, this is really a JVM issue and not maven. Classloaders are
> irrelevant,
> > you will get only one java.library.path per jvm that shouldn't be
> modified
> > at runtime (but it can be hacked).
> >
> > If you want this to work inside and out outside eclipse, then you might
> be
> > able to set -Djava.library.path in the MAVEN_OPTS environment param.
> There's
> > probably a few ways todo this too.
> >
> > If you only want this to work in eclipse, then I think there are
> parameters
> > and jvm arguments that you can add to the run configuration.
> Specifically,
> > set -Djava.library.path
> >
> > Another idea, that I don't like but can be used as a fallback is...If you
> > can work out at runtime the absolute path of dll/so then you can do
> > System.load(); instead of System.loadLibrary(). But that's not always an
> > option.
> >
> > Sorry I can't offer you a perfect howto.
> >
> >
> > On Sun, Apr 18, 2010 at 10:08 PM, Jon Kristensen <info@jonkristensen.com
> >wrote:
> >
> > > Hello people!
> > >
> > > I need some kind of native library support in m2eclipse.
> > >
> > > Maven is compiling and packaging my project nicely but in order to let
> > > m2eclipse handle the dependency management and run my application from
> > > within Eclipse I need the so/dll etc files to be put on the classpath
> > > and possibly also java.library.path to be set.
> > >
> > > Does maven deal with native library files in any special way? Also, do
> > > you have any suggestions on how this feature should work?
> > >
> > > Thank you in advance!
> > >
> > > Warm regards,
> > >
> > > --
> > > Jon Kristensen <in...@jonkristensen.com>
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > > For additional commands, e-mail: users-help@maven.apache.org
> > >
> > >
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>
Re: Native library files
Posted by Jon Kristensen <in...@jonkristensen.com>.
Hi!
That helped me a lot! I have realized that the problem was neither in
Maven or in m2eclipse. I assumed a native library on the classpath would
be loadable by System.loadLibrary(). I now extract the libraries in the
target/natives directory by using the maven-dependency-plugin:
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>compile</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-linux-64</artifactId>
<version>2.4.2</version>
<classifier>natives</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/natives</outputDirectory>
<includes>*.so,*.dylib,*.dll</includes>
</artifactItem>
<artifactItem>
<groupId>net.java.games</groupId>
<artifactId>jinput</artifactId>
<version>2.0.1</version>
<classifier>linux-natives</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/natives</outputDirectory>
<includes>*.so,*.dylib,*.dll</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
The only problem now is setting java.library.path as an m2eclipse
setting somehow.
Thanks so very much for your help!
/Jon
On Tue, 2010-04-20 at 21:24 +0930, Andrew Hughes wrote:
> I'm no expert but I'll try to help.
>
> The big question is how are you running your application, is there a
> specific maven goal/plugin you can speak of? If this is in the same JVM as
> maven then you'll need to kick maven off with an extra command line
> argument. If maven fork's the execution off to a system exec process then
> it'll be on a different jvm.
>
> But, this is really a JVM issue and not maven. Classloaders are irrelevant,
> you will get only one java.library.path per jvm that shouldn't be modified
> at runtime (but it can be hacked).
>
> If you want this to work inside and out outside eclipse, then you might be
> able to set -Djava.library.path in the MAVEN_OPTS environment param. There's
> probably a few ways todo this too.
>
> If you only want this to work in eclipse, then I think there are parameters
> and jvm arguments that you can add to the run configuration. Specifically,
> set -Djava.library.path
>
> Another idea, that I don't like but can be used as a fallback is...If you
> can work out at runtime the absolute path of dll/so then you can do
> System.load(); instead of System.loadLibrary(). But that's not always an
> option.
>
> Sorry I can't offer you a perfect howto.
>
>
> On Sun, Apr 18, 2010 at 10:08 PM, Jon Kristensen <in...@jonkristensen.com>wrote:
>
> > Hello people!
> >
> > I need some kind of native library support in m2eclipse.
> >
> > Maven is compiling and packaging my project nicely but in order to let
> > m2eclipse handle the dependency management and run my application from
> > within Eclipse I need the so/dll etc files to be put on the classpath
> > and possibly also java.library.path to be set.
> >
> > Does maven deal with native library files in any special way? Also, do
> > you have any suggestions on how this feature should work?
> >
> > Thank you in advance!
> >
> > Warm regards,
> >
> > --
> > Jon Kristensen <in...@jonkristensen.com>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: Native library files
Posted by Andrew Hughes <ah...@gmail.com>.
I'm no expert but I'll try to help.
The big question is how are you running your application, is there a
specific maven goal/plugin you can speak of? If this is in the same JVM as
maven then you'll need to kick maven off with an extra command line
argument. If maven fork's the execution off to a system exec process then
it'll be on a different jvm.
But, this is really a JVM issue and not maven. Classloaders are irrelevant,
you will get only one java.library.path per jvm that shouldn't be modified
at runtime (but it can be hacked).
If you want this to work inside and out outside eclipse, then you might be
able to set -Djava.library.path in the MAVEN_OPTS environment param. There's
probably a few ways todo this too.
If you only want this to work in eclipse, then I think there are parameters
and jvm arguments that you can add to the run configuration. Specifically,
set -Djava.library.path
Another idea, that I don't like but can be used as a fallback is...If you
can work out at runtime the absolute path of dll/so then you can do
System.load(); instead of System.loadLibrary(). But that's not always an
option.
Sorry I can't offer you a perfect howto.
On Sun, Apr 18, 2010 at 10:08 PM, Jon Kristensen <in...@jonkristensen.com>wrote:
> Hello people!
>
> I need some kind of native library support in m2eclipse.
>
> Maven is compiling and packaging my project nicely but in order to let
> m2eclipse handle the dependency management and run my application from
> within Eclipse I need the so/dll etc files to be put on the classpath
> and possibly also java.library.path to be set.
>
> Does maven deal with native library files in any special way? Also, do
> you have any suggestions on how this feature should work?
>
> Thank you in advance!
>
> Warm regards,
>
> --
> Jon Kristensen <in...@jonkristensen.com>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>