[英]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.