![](/img/trans.png)
[英]Error resolving version for plugin 'org.codehaus.mojo:maven-war-plugin' from the repositories
[英]Is it possible to use the org.codehaus.mojo:build-helper-maven-plugin to bundle native dlls into a war file?
我有一組用maven構建的Java項目。
現在,其中一個依賴於本機DLL,而后者又依賴於其他幾個DLL,我也構建了所有這些。 構建的最終產品是戰爭文件。 我需要這些dll放在該war文件中。
我知道一種方法是將這些dll包含為各自java項目的資源。 這樣做意味着我必須在構建該項目之前將這些dll復制到相應Java項目的資源目錄中。
但是我正在嘗試另一種方式,不確定是做錯了還是只是我做錯了。 我說的是org.codehaus.mojo:build-helper-maven-plugin
的attach-artifact
目標。
這是我嘗試執行的操作:
根級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
,但該文件不存在!
根據我在pom中看到的,Java項目沒有聲明任何依賴關系,而該依賴關系會向包含本機dll的項目構建戰爭。 聲明此依賴關系時應該沒問題。
編輯:
將其添加到war文件pom的dependencies
部分:
<dependency>
<groupId>com.shunra.localDriverProxy</groupId>
<version>0.0.1</version>
<artifactId>local-driver-proxy</artifactId>
<classifier>DataStruct</classifier>
<type>dll</type>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.