Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我能';T_Java_Maven_Netbeans_Dll - Fatal编程技术网

Java 当我能';T

Java 当我能';T,java,maven,netbeans,dll,Java,Maven,Netbeans,Dll,我有一个maven项目,其中包含一些库依赖项(.dll)(我把它放在一个“lib”文件夹中)。我可以在Netbeans中毫无问题地运行项目,但当我尝试在Netbeans之外运行build.jar时,在加载库时出现以下错误: 无法在AMD 64位平台上加载此.dll(机器代码=0xbd) 我的计算机上只安装了一个Java实例,它应该是Netbeans/Maven用来运行项目的同一个JVM。所以我不明白Netbeans/Maven如何能够在不同于我的平台上运行这个应用程序?我尝试过查看Netbean

我有一个maven项目,其中包含一些库依赖项(.dll)(我把它放在一个“lib”文件夹中)。我可以在Netbeans中毫无问题地运行项目,但当我尝试在Netbeans之外运行build.jar时,在加载库时出现以下错误:

无法在AMD 64位平台上加载此.dll(机器代码=0xbd)

我的计算机上只安装了一个Java实例,它应该是Netbeans/Maven用来运行项目的同一个JVM。所以我不明白Netbeans/Maven如何能够在不同于我的平台上运行这个应用程序?我尝试过查看Netbeans执行(从输出)命令来运行项目,我认为是这样的:

cd C:\Users\Birger\Workspace\myproject; "JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_91" cmd /c "\"\"C:\\Program Files\\NetBeans 8.1\\java\\maven\\bin\\mvn.bat\" -Dexec.args=\"-Djava.library.path=lib\\ -classpath %classpath com.mysite.myproject.Main\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk1.8.0_91\\bin\\java.exe\" -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans 8.1\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\""
我试过这两个命令

"C:\Program Files\Java\jdk1.8.0_91\jre\bin\java.exe" -Djava.library.path=lib\ -jar myproject-1.0-SNAPSHOT.jar
"C:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -Djava.library.path=lib\ -jar myproject-1.0-SNAPSHOT.jar
我添加了
System.out.println(System.getProperty(“sun.arch.data.model”)
让我的应用程序打印出cpu架构。它在两种情况下都打印
64

尝试在
C:\Program Files\NetBeans 8.1\java\maven\bin\mvn.bat
中查找“mvn.bat”文件,但我找不到maven运行我的应用程序的任何线索

有人能帮我吗

伯杰

编辑

这是我的测试项目的完整源代码。我的项目的
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.mysite</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <repositories>
        <repository>
            <id>repo</id>
            <url>file://${project.basedir}/temp-repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>jni4net</groupId>
            <artifactId>jni4net.j</artifactId>
            <version>0.8.8.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.mysite.myproject.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <resources>          
                                <resource>
                                    <directory>lib</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>              
                        </configuration>            
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
运行项目时的Netbeans输出(为详细输出添加了
--debug
选项):

EDIT3:

我安装了32位JVM,并尝试使用以下命令运行应用程序:

"C:\Program Files (x86)\Java\jre1.8.0_91\bin\java.exe" -Djava.library.path=lib\ -jar myproject-1.0-SNAPSHOT.jar
现在我得到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Birger\Workspace\myproject\target\lib\jni4net.n.w32.v20-0.8.8.0.dll: Can't load this .dll (machine code=0xbd) on a IA 32-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.mysite.myproject.Main.<clinit>(Main.java:19)

显然,我的应用程序无法使用编译期间复制的.dll。要使其工作,我必须加载原始库文件(而不是复制的文件)。Netbeans确实做到了这一点,因此我的应用程序在Netbeans上运行良好,但在尝试使用编译(和复制)文件时却没有

FIX:在我的
pom.xml
中,资源筛选设置为
true
。我将其设置为
false
(或删除该条目),现在我的应用程序可以从netbeans外部启动。这是我新的
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.mysite</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <repositories>
        <repository>
            <id>repo</id>
            <url>file://${project.basedir}/temp-repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>jni4net</groupId>
            <artifactId>jni4net.j</artifactId>
            <version>0.8.8.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.mysite.myproject.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <resources>          
                                <resource>
                                    <directory>lib</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>            
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

4.0.0
com.mysite
我的项目
1.0-快照
罐子
UTF-8
1.8
1.8
回购
文件://${project.basedir}/temp repo
jni4net
jni4net.j
0.8.8.0
org.apache.maven.plugins
maven依赖插件
2.10
复制
包裹
复制依赖项
${project.build.directory}/lib
org.apache.maven.plugins
maven jar插件
3.0.2
真的
解放党/
com.mysite.myproject.Main
maven资源插件
3.0.1
复制资源
验证
复制资源
${project.build.directory}/lib
解放党
假的

我很久以前就遇到过这个问题

只需删除
true
,这会使文件在复制时损坏。(臭虫!!??)

我可以复制你的问题。这也将解决您的问题


希望这能有所帮助。

举一个小例子,再现其他人可以看到的问题。尝试使用
--debug
选项运行Maven,这将为您提供有关Maven具体操作的更详细信息。该运行似乎找不到64位dll,而是提供了32位dll,可能是NetBeans在32位下运行的<代码>System.getProperties().list(System.out)将显示该信息。选择“C:/ProgramFiles(x86)/java/…”可能会有所帮助。谢谢大家的关注。有关myproject的完整源代码,请参阅我的问题的更新,并运行output.Added
System.getProperties().list(System.out)到源代码,以便在运行Netbeans/Maven和从命令行进行比较。输出实际上是相同的。是的,这解决了错误。谢谢“过滤”到底是什么?为什么它会破坏.dll?过滤允许您为资源使用变量。hier更具体地解释说,资源过滤试图对插件处理的资源执行变量替换。;i、 它在资源中查找并替换类似于
“${some.name}”
的内容。如果在非文本资源上执行此操作,则可能会损坏它。这不是一个错误。。。那么正确的方法应该是排除jni,而不是关闭过滤。过滤是一种用pom/maven中的值“替换”资源文件中的“变量”的方法。适用于多种配置。我怀疑在库文件中有具有可变格式的文本,如我看到的
${likethis}
。那么它是在用值替换已识别的变量名?我想我不会放一个
set project_dir=YOURPROJECTDIRECTORYHERE
set proxygen_dir=YOURPROXYGENINSTALLATIONDIRECTORYHERE
set temp_repo_dir=%project_dir%\temp-repo
call mvn install:install-file -DlocalRepositoryPath=%temp_repo_dir% -DcreateChecksum=true -Dpackaging=jar -Dfile=%proxygen_dir%\lib\jni4net.j-0.8.8.0.jar -DgroupId=jni4net -DartifactId=jni4net.j -Dversion=0.8.8.0
"C:\Program Files (x86)\Java\jre1.8.0_91\bin\java.exe" -Djava.library.path=lib\ -jar myproject-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Birger\Workspace\myproject\target\lib\jni4net.n.w32.v20-0.8.8.0.dll: Can't load this .dll (machine code=0xbd) on a IA 32-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.mysite.myproject.Main.<clinit>(Main.java:19)
"C:\Program Files\Java\jdk1.8.0_91\bin\java" -Djava.library.path=lib\ -classpath C:\Users\Birger\Workspace\myproject\target\classes;C:\Users\Birger\.m2\repositor‌​y\jni4net\jni4net.j\0.8.8.0\jni4net.j-0.8.8.0.jar com.mysite.myproject.Main
"C:\Program Files\Java\jdk1.8.0_91\bin\java" -Djava.library.path=lib\ -classpath classes;C:\Users\Birger\.m2\repositor‌​y\jni4net\jni4net.j\0.8.8.0\jni4net.j-0.8.8.0.jar com.mysite.myproject.Main
"C:\Program Files\Java\jdk1.8.0_91\bin\java" -Djava.library.path=lib\ -classpath classes com.mysite.myproject.Main
<?xml version="1.0" encoding="UTF-8"?>
<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.mysite</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <repositories>
        <repository>
            <id>repo</id>
            <url>file://${project.basedir}/temp-repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>jni4net</groupId>
            <artifactId>jni4net.j</artifactId>
            <version>0.8.8.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.mysite.myproject.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <resources>          
                                <resource>
                                    <directory>lib</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>            
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>