- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组用maven构建的java项目。
现在,其中一个依赖于 native DLL,而 native DLL 又依赖于其他几个,所有这些都是我构建的。构建的最终产品是一个 war 文件。我需要将这些 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>
native 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文件,但它不包含任何 native 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 来完成我需要的操作 - 将 native DLL bundle 到 war 中吗?
编辑
我已经尝试了SpaceTrucker建议的方法,没有产生任何错误,但由此产生的 war 仍然是一样的——没有打包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项目声明依赖关系,该项目构建了对包含 native dll的项目的 war 。声明此依赖项时应该没问题。
编辑:
将其添加到 war 文件 pom 的 dependency
部分:
<dependency>
<groupId>com.shunra.localDriverProxy</groupId>
<version>0.0.1</version>
<artifactId>local-driver-proxy</artifactId>
<classifier>DataStruct</classifier>
<type>dll</type>
</dependency>
关于java - 是否可以使用 org.codehaus.mojo :build-helper-maven-plugin to bundle native dlls into a war file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233787/
原谅我,如果我在 Blazor 中遗漏了一些明显的东西,但是由于 dll 存在于浏览器中,就像 javascript 文件一样,用户是否可以通过反编译文件和/或运行它们来下载 dll 文件并查看执行代
我想获取为给定进程加载的所有 dll 的列表。我目前正在使用 .NET Framework 4.0。我知道有一个 bug尝试通过 Process.Modules 属性访问所有托管 dll 时。 (仅列
最近我开始了一个有很多表单、框架和额外控件的项目,所以我的应用程序膨胀了,我在我的项目中使用了 3 个 exe(全部在 Delphi 2009 中制作),这些应用程序也共享相同的框架和表单。所以我用
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: How to tell if .net app was compiled in DEBUG or RELEA
我一直在尝试使用 Dependency Walker 解决可执行文件的 .dll 依赖关系。目前,我丢失了以下形式的 .dll: API-MS-WIN-XXX EXT-MS-WIN-XXX 例如: A
我有点熟悉在 .NET 中使用配置,但我对某些事情有点困惑。您创建一个 App.Config 文件以与您的 exe 一起使用,您创建的任何 dll 都使用相同的配置文件。 那么如何从 DLL 中访问配
有没有一种简单的方法来获取与文件名模式匹配的文件名列表包括对父目录的引用?我想要的是 "..\ThirdParty\dlls\*.dll" 返回一个像 ["..\ThirdParty\dlls\one
我有一个严重依赖插件的应用程序。 在启动时,它会扫描目录中的 DLL 并一个一个地加载它们,寻找实现特定导出功能的 DLL。但是 - 如果有人将不同类型的文件重命名为 *.dll 并将其放入目录中,则
我正在编写一个依赖于许多其他包的 R 包。当我在 session 中加载太多包时,我经常收到此错误: Error in dyn.load(file, DLLpath = DLLpath, ...) :
我正尝试在 Visual C# 中编译我的程序。但是,我需要它运行的机器(好吧,我需要它能够在任何 Windows 机器上运行,至少是 Windows XP)没有安装 .NET DLL。我是这方面的新
我有一个 .dll,我试图将其作为资源嵌入到可执行文件中。以下两个问题有点帮助,但不是完全的帮助: Embedding assemblies inside another assembly 这似乎不像
我正在尝试实现一个 C++ DLL(我自己创建的),它在 C# 窗体应用程序中使用英特尔性能原语。当我尝试运行该程序时出现“未找到 DLL 异常”。在本站其他帖子中提出的一个可能原因是必须引用依赖的
我想将依赖项(几个 DLL 文件)复制到一个单独的子目录中。安装我的程序后,目录结构如下所示: 动态链接库/ 一个.dll b.dll sample / pg.exe 我脚本的相关部分如下: [Dir
我想知道 virtualenv 没有像创建 Lib 和 Scripts 那样创建 DLL 文件夹的原因是什么? 当我在使用 PyDev 时遇到以下问题时,我想到了这个问题; 我将我的一个 virtua
用户控件有一个派生自图像按钮的类 ImButtonLink。 protected void reserv_Click(object sender, ImageClickEventArgs e) {
昨天,在 Cygwin 下使用 GCC 编译的 DLL 时,我遇到了一个相当烦人的崩溃。基本上,一旦您使用调试器运行,您可能最终会陷入调试陷阱,原因是 RtlFreeHeap() 接收到一个它未分配的
我尝试加载依赖于“Rblas.dll”的共享库“R.dll”,两者都在同一目录中。当我用 ctypes(加载共享库的 python 模块)加载 R.dll 时 import ctypes lib =
关于Dll链接,静态链接和隐式链接是一回事吗? 我理解隐式链接和显式链接的区别,我认为静态是隐式的同义词,但我不确定。 如果它们确实不同,它们之间有什么区别,我该如何指定我想要的是哪一个? 这个lin
我刚刚将另一个项目页面及其 dll 集成到我现有项目的 Bin/文件夹中。我的项目框架是3.5。当我尝试构建项目或解决方案时,它抛出以下错误: "The type 'ASP.global_asax'
如果在VB6应用程序执行过程中出现上述错误,解决方案是重新注册当时可能正在访问的DLL吗? 或者这是 DLL 版本不正确的问题? 最佳答案 或者您可能已经在您的应用程序中添加了一个图标,并且与操作系统
我是一名优秀的程序员,十分优秀!