Mavenで構築されたJavaプロジェクトのグループがあります。
現在、そのうちの 1 つはネイティブ DLL に依存しており、そのネイティブ DLL は他のいくつかの DLL に依存しており、それらもすべて私がビルドしています。ビルドの最終製品は war ファイルです。これらのdllがそのwarファイル内にある必要があります。
それを行う1つの方法は、これらのdllをそれぞれのJavaプロジェクトのリソースとして含めることです。そうすることは、プロジェクトをビルドする前に、これらの dll をそれぞれの Java プロジェクトのリソース ディレクトリにコピーする必要があることを意味します。
しかし、私は別の方法を模索しようとしていますが、それが間違っているのは私だけなのか、それとも単に不可能なのかはわかりません. attach-artifact
の目標について話していorg.codehaus.mojo:build-helper-maven-plugin
ます。
これが私がそれをやろうとしている方法です:
ルート レベルの pom.xml:
<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.shunra</groupId>
<name>VCat-build</name>
<version>1.0.0.SNAPSHOT</version>
<artifactId>VCat-build</artifactId>
<packaging>pom</packaging>
<modules>
<module>../../../../DriverProxy</module>
<module>../../../VCat</module>
<!-- More modules follow -->
</modules>
<build>
<plugins>
</plugins>
</build>
</project>
ネイティブ DLL の pom.xml:
<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>
<groupId>com.shunra.localDriverProxy</groupId>
<version>0.0.1</version>
<artifactId>local-driver-proxy</artifactId>
<packaging>pom</packaging>
<name>Local Driver Proxy</name>
<properties>
<msbuild.exe>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</msbuild.exe>
<msbuild.configuration>StratusRelease</msbuild.configuration>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>${msbuild.exe}</executable>
<workingDirectory>${basedir}</workingDirectory>
</configuration>
<executions>
<execution>
<id>clean-with-msbuild</id>
<phase>clean</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>/t:Clean</argument>
<argument>/p:Configuration=${msbuild.configuration}</argument>
<argument>LocalDriverProxy.sln</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>build-with-msbuild</id>
<phase>compile</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>/t:Build</argument>
<argument>/p:Configuration=${msbuild.configuration}</argument>
<argument>LocalDriverProxy.sln</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>attach-local-driver-proxy</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${basedir}/../Distribution/DataStruct.dll</file>
<classifier>DataStruct</classifier>
<type>dll</type>
</artifact>
<artifact>
<file>${basedir}/../Distribution/GraphSetup.dll</file>
<classifier>GraphSetup</classifier>
<type>dll</type>
</artifact>
<!-- more artifacts follow -->
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Java プロジェクトの pom.xml:
<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.shunra</groupId>
<artifactId>vcat</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.0.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.9</org.aspectj-version>
<org.slf4j-version>1.5.10</org.slf4j-version>
</properties>
<dependencies>
<!-- Quite a few dependencies follow -->
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source/>
<target/>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.1</version>
<configuration>
<webappDirectory>target/exploded</webappDirectory>
<archive>
<!-- <manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
</manifest> -->
</archive>
</configuration>
<executions>
<execution>
<id>prepare-war</id>
<phase>prepare-package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
実行mvn package
は成功し、war ファイルが作成されますが、ネイティブ DLL は含まれていません。これらの DLL は問題なくビルドされますが、どこにもコピーされません。
私は走っmvn -X
た。関連すると思われる行は次のとおりです。
Apache Maven 3.0.4 (r1232337; 2012-01-17 03:44:56-0500)
Maven home: o:\java\apache-maven-3.0.4
Java version: 1.6.0_27, vendor: Sun Microsystems Inc.
Java home: c:\Program Files\Java\jdk1.6.0_27\jre
.
.
.
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact (attach-local-driver-proxy)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<artifacts>
<artifact>
<file>C:\dev\shunra\DriverProxy/../Distribution/DataStruct.dll</file>
<classifier>DataStruct</classifier>
<type>dll</type>
</artifact>
<artifact>
<file>C:\dev\shunra\DriverProxy/../Distribution/GraphSetup.dll</file>
<classifier>GraphSetup</classifier>
<type>dll</type>
</artifact>
.
.
.
</artifacts>
<basedir>${basedir}</basedir>
<mavenSession>${session}</mavenSession>
<project>${project}</project>
<runOnlyAtExecutionRoot default-value="false">${buildhelper.runOnlyAtExecutionRoot}</runOnlyAtExecutionRoot>
<skipAttach default-value="false">${buildhelper.skipAttach}</skipAttach>
</configuration>
[DEBUG] =======================================================================
[DEBUG] com.shunra.localDriverProxy:local-driver-proxy:pom:0.0.1
.
.
.
[INFO] --- build-helper-maven-plugin:1.7:attach-artifact (attach-local-driver-proxy) @ local-driver-proxy ---
[DEBUG] org.codehaus.mojo:build-helper-maven-plugin:jar:1.7:
.
.
.
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.8:compile
[DEBUG] Created new class realm plugin>org.codehaus.mojo:build-helper-maven-plugin:1.7
[DEBUG] Importing foreign packages into class realm plugin>org.codehaus.mojo:build-helper-maven-plugin:1.7
[DEBUG] Imported: < maven.api
[DEBUG] Populating class realm plugin>org.codehaus.mojo:build-helper-maven-plugin:1.7
[DEBUG] Included: org.codehaus.mojo:build-helper-maven-plugin:jar:1.7
.
.
.
[DEBUG] Excluded: org.apache.maven:maven-artifact:jar:2.0.6
[DEBUG] Configuring mojo org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact from plugin realm ClassRealm[plugin>org.codehaus.mojo:build-helper-maven-plugin:1.7, parent: sun.misc.Launcher$AppClassLoader@3326b249]
[DEBUG] Configuring mojo 'org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact' with basic configurator -->
[DEBUG] (s) file = C:\dev\shunra\DriverProxy\..\Distribution\DataStruct.dll
[DEBUG] (s) classifier = DataStruct
[DEBUG] (s) type = dll
[DEBUG] (s) file = C:\dev\shunra\DriverProxy\..\Distribution\GraphSetup.dll
[DEBUG] (s) classifier = GraphSetup
[DEBUG] (s) type = dll
.
.
.
[DEBUG] (f) artifacts = [org.codehaus.mojo.buildhelper.Artifact@7e79b177, ...]
[DEBUG] (f) basedir = C:\dev\shunra\DriverProxy
[DEBUG] (f) mavenSession = org.apache.maven.execution.MavenSession@37567e6c
[DEBUG] (f) project = MavenProject: com.shunra.localDriverProxy:local-driver-proxy:0.0.1 @ C:\dev\shunra\DriverProxy\pom.xml
[DEBUG] (f) runOnlyAtExecutionRoot = false
[DEBUG] (f) skipAttach = false
[DEBUG] -- end configuration --
私はmavenにあまり詳しくないので、ログから重要な部分を省略している可能性があります。完全なログはこちら - http://pastebin.com/raw.php?i=fhZCmGxB (他のいくつかの Java プロジェクトのビルドのログを削除しました。それらはすべて同じように見えますが、膨大な量のスペースを必要とします)
だから私の質問はこれです - を使用しorg.codehaus.mojo:build-helper-maven-plugin
て必要なことを行うことができますか - ネイティブ DLL を戦争にバンドルできますか?
編集
SpaceTrucker によって提案されたアプローチを試しましたが、エラーは発生しませんが、結果の戦争は同じままです - DLL はパッケージ化されていません。Maven ログには次のエントリが含まれます。
[DEBUG] =======================================================================
[DEBUG] com.shunra:vcat:war:0.0.1
.
.
.
[DEBUG] com.shunra.localDriverProxy:local-driver-proxy:dll:DataStruct:0.0.1:compile
.
.
.
[INFO] Exploding webapp...
[INFO] Copy webapp webResources to C:\dev\shunra\Application\VCat\target\exploded
[INFO] Assembling webapp vcat in C:\dev\shunra\Application\VCat\target\exploded
[DEBUG] Processing: spring-context-3.1.0.RELEASE.jar
.
.
.
[DEBUG] Processing: local-driver-proxy-0.0.1.dll
[DEBUG] Skipping artifact of type dll for WEB-INF/lib
[INFO]
[INFO] --- maven-war-plugin:2.0.1:war (default-war) @ vcat ---
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-war-plugin:2.0.1:war from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-war-plugin:2.0.1, parent: sun.misc.Launcher$AppClassLoader@3326b249]
.
.
.
[DEBUG] -- end configuration --
[INFO] Exploding webapp...
[INFO] Copy webapp webResources to C:\dev\shunra\Application\VCat\target\exploded
[INFO] Assembling webapp vcat in C:\dev\shunra\Application\VCat\target\exploded
[DEBUG] Processing: spring-context-3.1.0.RELEASE.jar
.
.
.
[DEBUG] Processing: local-driver-proxy-0.0.1.dll
[DEBUG] Skipping artifact of type dll for WEB-INF/lib
[INFO] Generating war C:\dev\shunra\Application\VCat\target\vcat-0.0.1.war
ログには が記載されてlocal-driver-proxy-0.0.1.dll
いますが、このファイルは存在しません!