On Tue, June 5, 2007 10:07 am, Arne Styve wrote: > I have a question related to using DLLs with Maven. We colaborate with a > company that develops parts of our system. They deliver their component as > a set of DLLs. I've used JNI to create a Java interface to these DLL, so > that I can use Java to develop the software that will use the DLLs. > How can I set up a Maven2 project that takes these DLLs and deploy them > correctly to our company repository, so that I in my project, where I am > going to use the DLLs, can add dependencies to the DLLs the usual Maven2 > way ? I.e. this project will not have any sourcefiles, only the 4 DLLs.
We faced the same problem. Originally we tried to publish the DLL artifact into the repository directly, but this caused problems for us, as our JNI native code had to run on Windows, Linux and Solaris, and maintaining the proper naming conventions and suffixes was a pain. We eventually opted to wrap the JNI DLLs / .so files inside a jar, and publish the jar in the repository, including a classifier to show both the platform (windows / linux / solaris) and architecture (x86, amd64, etc). >From that point on we only needed to worry about the name of the jar, which was consistent across platforms. When you have multiple DLLs, putting them in a jar reduces them down from many artifacts to one artifact, which is easier to deal with. This is the pom we use, it should give some clues. The DLLs are built by ant using the antrun plugin, and maven worries about the packaging and deployment: <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>alchemy-ii-native</artifactId> <groupId>alchemy</groupId> <version>4.0.30-SNAPSHOT</version> </parent> <artifactId>alchemy-cdo</artifactId> <packaging>jar</packaging> <name>Alchemy Native CDO</name> <description>Placeholder for the CDO stuff from London</description> <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-webdav</artifactId> <version>1.0-beta-2</version> </extension> </extensions> <sourceDirectory>src/main/java</sourceDirectory> <!-- <testSourceDirectory>src</testSourceDirectory>--> <resources> <resource> <directory>target/build</directory> <includes> <include>*.dll</include> </includes> </resource> <resource> <directory>target/build</directory> <includes> <include>*.dylib</include> </includes> </resource> <resource> <directory>target/build</directory> <includes> <include>*.so</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>alchemy-cdo-version.properties</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native-maven-plugin</artifactId> <extensions>true</extensions> <!-- Generate JNI header files based on a list of class name on the classpath --> <!-- The generated include directory is automatically added to include path at compile phase --> <!-- Ensure to have appropriate denpendency jar file(s) in your pom --> <executions> <execution> <id>javah</id> <phase>generate-sources</phase> <configuration> <classNames> <className>alchemy.cdo.measure.CDOTranche</className> </classNames> <!-- | Note: | 1. Without classNames, javah mojo will search for all JNI classes | in your dependency list. --> </configuration> <goals> <goal>javah</goal> </goals> </execution> </executions> </plugin> <!-- trigger the ant build --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <id>2antrun</id> <phase>process-sources</phase><!-- needs to run BEFORE resources --> <configuration> <tasks> <ant target="compile-cc-${os-platform}" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>ant-contrib</groupId> <artifactId>cpptasks</artifactId> <version>1.0b3</version> </dependency> </dependencies> </plugin> <!-- jar plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>${os-platform}-${os-arch}</classifier> </configuration> </execution> </executions> </plugin> <!-- manually define the artifacts ant produces for deployment --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>attach-artifacts</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> <configuration> <artifacts> <artifact> <file>${project.build.directory}/${artifactId}-${version}-${os-platform}-${os-arch}.jar</file> <type>jar</type> <classifier>${os-platform}-${os-arch}</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> <!-- site plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <configuration> <siteDirectory>${basedir}/site/</siteDirectory> </configuration> </plugin> </plugins> </build> <dependencies> <!-- CDO Client jar --> <dependency> <groupId>alchemy</groupId> <artifactId>alchemy-cdo-client</artifactId> <version>${pom.version}</version> </dependency> </dependencies> <reporting> <plugins> <plugin> <artifactId>maven-javadoc-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jxr-maven-plugin</artifactId> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> </plugin> <plugin> <artifactId>maven-clover-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <configuration> <targetjdk>1.5</targetjdk> <rulesets> <ruleset>/rulesets/basic.xml</ruleset> <ruleset>/rulesets/controversial.xml</ruleset> </rulesets> <format>xml</format> <linkXref>true</linkXref> <sourceEncoding>utf-8</sourceEncoding> <minimumTokens>100</minimumTokens> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>changes-maven-plugin</artifactId> </plugin> <!-- <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>changelog-maven-plugin</artifactId> </plugin> --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>taglist-maven-plugin</artifactId> </plugin> </plugins> </reporting> </project> Regards, Graham -- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
