当我不能运行这个项目时,Maven 正在做啥样的魔法?
Posted
技术标签:
【中文标题】当我不能运行这个项目时,Maven 正在做啥样的魔法?【英文标题】:What kind of sorcery is Maven doing to run this project, when I can't?当我不能运行这个项目时,Maven 正在做什么样的魔法? 【发布时间】:2016-11-10 16:00:11 【问题描述】:我有一个带有一些库依赖项 (.dll) 的 maven 项目(我将其放在“lib”文件夹中)。我可以在 Netbeans 中毫无问题地运行该项目,但是当我尝试在 Netbeans 之外运行构建的 .jar 时,加载库时出现以下错误:
Can't load this .dll (machine code=0xbd) on a AMD 64-bit platform
我的计算机上只安装了 一个 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>
我项目的班级
package com.mysite.myproject;
import java.io.File;
import java.io.IOException;
import net.sf.jni4net.Bridge;
public class Main
static
String libDir = System.getProperty("java.library.path");
System.loadLibrary("jni4net.n-0.8.8.0");
if (System.getProperty("sun.arch.data.model").equals("64"))
System.loadLibrary("jni4net.n.w64.v20-0.8.8.0");
System.loadLibrary("jni4net.n.w64.v40-0.8.8.0");
else
System.loadLibrary("jni4net.n.w32.v20-0.8.8.0");
System.loadLibrary("jni4net.n.w32.v40-0.8.8.0");
try
Bridge.init(new File(libDir));
System.out.println("Initialized!");
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
new Main();
public Main()
System.out.println("Hello world!");
运行项目时的 Netbeans 输出(为详细输出添加了 --debug
选项):
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 --debug org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\""
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
C:\Program Files\Java\jdk1.8.0_91
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: C:\Program Files\NetBeans 8.1\java\maven
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_91\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
Populating class realm maven.ext
Included C:\Program Files\NetBeans 8.1\java\maven-nblib\netbeans-eventspy.jar
Error stacktraces are turned on.
Reading global settings from C:\Program Files\NetBeans 8.1\java\maven\conf\settings.xml
Reading user settings from C:\Users\Birger\.m2\settings.xml
Using local repository at C:\Users\Birger\.m2\repository
Using manager EnhancedLocalRepositoryManager with priority 10 for C:\Users\Birger\.m2\repository
Scanning for projects...
Extension realms for project com.mysite:myproject:jar:1.0-SNAPSHOT: (none)
Looking up lifecyle mappings for packaging jar from ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]]
=== REACTOR BUILD PLAN ================================================
Project: com.mysite:myproject:jar:1.0-SNAPSHOT
Tasks: [org.codehaus.mojo:exec-maven-plugin:1.2.1:exec]
Style: Regular
=======================================================================
------------------------------------------------------------------------
Building myproject 1.0-SNAPSHOT
------------------------------------------------------------------------
Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
Lifecycle clean -> [pre-clean, clean, post-clean]
Lifecycle site -> [pre-site, site, post-site, site-deploy]
=== PROJECT BUILD PLAN ================================================
Project: com.mysite:myproject:1.0-SNAPSHOT
Dependencies (collect): []
Dependencies (resolve): [test]
Repositories (dependencies): [libs-release (http://artifactory.osc.no:8081/artifactory/libs-release/, releases), repo (file://C:\Users\Birger\Workspace\myproject/temp-repo, releases+snapshots), central (http://repo.maven.apache.org/maven2, releases)]
Repositories (plugins) : [libs-release (http://artifactory.osc.no:8081/artifactory/libs-release/, releases), central (http://repo.maven.apache.org/maven2, releases)]
-----------------------------------------------------------------------
Goal: org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli)
Style: Regular
Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<basedir default-value="$basedir"/>
<classpathScope default-value="runtime">$exec.classpathScope</classpathScope>
<commandlineArgs>$exec.args</commandlineArgs>
<executable>$exec.executable</executable>
<longClasspath default-value="false">$exec.longClasspath</longClasspath>
<outputFile>$exec.outputFile</outputFile>
<project default-value="$project"/>
<session default-value="$session"/>
<skip default-value="false">$skip</skip>
<sourceRoot>$sourceRoot</sourceRoot>
<testSourceRoot>$testSourceRoot</testSourceRoot>
<workingDirectory>$exec.workingdir</workingDirectory>
</configuration>
=======================================================================
com.mysite:myproject:jar:1.0-SNAPSHOT
jni4net:jni4net.j:jar:0.8.8.0:compile
--- exec-maven-plugin:1.2.1:exec (default-cli) @ myproject ---
Created new class realm maven.api
Importing foreign packages into class realm maven.api
Imported: org.apache.maven.cli < maven.ext
Imported: org.codehaus.plexus.lifecycle < maven.ext
Imported: org.apache.maven.lifecycle < maven.ext
Imported: org.apache.maven.repository < maven.ext
Imported: org.codehaus.plexus.personality < maven.ext
Imported: org.apache.maven.usability < maven.ext
Imported: org.codehaus.plexus.configuration < maven.ext
Imported: org.sonatype.aether.version < maven.ext
Imported: org.sonatype.aether.* < maven.ext
Imported: org.sonatype.aether.artifact < maven.ext
Imported: org.apache.maven.* < maven.ext
Imported: org.apache.maven.project < maven.ext
Imported: org.sonatype.aether.repository < maven.ext
Imported: org.sonatype.aether.impl < maven.ext
Imported: org.apache.maven.exception < maven.ext
Imported: org.apache.maven.plugin < maven.ext
Imported: org.sonatype.aether.collection < maven.ext
Imported: org.codehaus.plexus.* < maven.ext
Imported: org.codehaus.plexus.logging < maven.ext
Imported: org.apache.maven.profiles < maven.ext
Imported: org.sonatype.aether.metadata < maven.ext
Imported: org.sonatype.aether.spi < maven.ext
Imported: org.codehaus.plexus.util.xml.pull.XmlPullParserException < maven.ext
Imported: org.apache.maven.wagon.* < maven.ext
Imported: org.sonatype.aether.graph < maven.ext
Imported: org.apache.maven.rtinfo < maven.ext
Imported: org.sonatype.aether.installation < maven.ext
Imported: org.apache.maven.monitor < maven.ext
Imported: org.sonatype.aether.transfer < maven.ext
Imported: org.codehaus.plexus.context < maven.ext
Imported: org.apache.maven.wagon.observers < maven.ext
Imported: org.apache.maven.wagon.resource < maven.ext
Imported: org.sonatype.aether.deployment < maven.ext
Imported: org.apache.maven.model < maven.ext
Imported: org.codehaus.plexus.util.xml.Xpp3Dom < maven.ext
Imported: org.apache.maven.artifact < maven.ext
Imported: org.apache.maven.toolchain < maven.ext
Imported: org.codehaus.plexus.util.xml.pull.XmlSerializer < maven.ext
Imported: org.apache.maven.settings < maven.ext
Imported: org.apache.maven.wagon.authorization < maven.ext
Imported: org.apache.maven.wagon.events < maven.ext
Imported: org.apache.maven.wagon.authentication < maven.ext
Imported: org.apache.maven.reporting < maven.ext
Imported: org.apache.maven.wagon.repository < maven.ext
Imported: org.apache.maven.configuration < maven.ext
Imported: org.codehaus.plexus.classworlds < maven.ext
Imported: org.codehaus.classworlds < maven.ext
Imported: org.codehaus.plexus.util.xml.pull.XmlPullParser < maven.ext
Imported: org.apache.maven.clas-s-realm < maven.ext
Imported: org.sonatype.aether.resolution < maven.ext
Imported: org.apache.maven.execution < maven.ext
Imported: org.apache.maven.wagon.proxy < maven.ext
Imported: org.codehaus.plexus.container < maven.ext
Imported: org.codehaus.plexus.component < maven.ext
Populating class realm maven.api
org.codehaus.mojo:exec-maven-plugin:jar:1.2.1:
org.apache.maven:maven-toolchain:jar:1.0:compile
org.apache.maven:maven-project:jar:2.0.6:compile
org.apache.maven:maven-settings:jar:2.0.6:compile
org.apache.maven:maven-profile:jar:2.0.6:compile
org.apache.maven:maven-plugin-registry:jar:2.0.6:compile
org.apache.maven:maven-model:jar:2.0.6:compile
org.apache.maven:maven-artifact:jar:2.0.6:compile
org.apache.maven:maven-artifact-manager:jar:2.0.6:compile
org.apache.maven:maven-repository-metadata:jar:2.0.6:compile
org.apache.maven:maven-core:jar:2.0.6:compile
org.apache.maven:maven-plugin-parameter-documenter:jar:2.0.6:compile
org.apache.maven.reporting:maven-reporting-api:jar:2.0.6:compile
org.apache.maven.doxia:doxia-sink-api:jar:1.0-alpha-7:compile
org.apache.maven:maven-error-diagnostics:jar:2.0.6:compile
commons-cli:commons-cli:jar:1.0:compile
org.apache.maven:maven-plugin-descriptor:jar:2.0.6:compile
org.codehaus.plexus:plexus-interactivity-api:jar:1.0-alpha-4:compile
org.apache.maven:maven-monitor:jar:2.0.6:compile
classworlds:classworlds:jar:1.1:compile
org.apache.maven:maven-plugin-api:jar:2.0.6:compile
org.codehaus.plexus:plexus-utils:jar:2.0.5:compile
org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9:compile
junit:junit:jar:3.8.2:test (scope managed from compile) (version managed from 3.8.1)
org.apache.commons:commons-exec:jar:1.1:compile
Created new class realm plugin>org.codehaus.mojo:exec-maven-plugin:1.2.1
Importing foreign packages into class realm plugin>org.codehaus.mojo:exec-maven-plugin:1.2.1
Imported: < maven.api
Populating class realm plugin>org.codehaus.mojo:exec-maven-plugin:1.2.1
Included: org.codehaus.mojo:exec-maven-plugin:jar:1.2.1
Included: org.apache.maven.reporting:maven-reporting-api:jar:2.0.6
Included: org.apache.maven.doxia:doxia-sink-api:jar:1.0-alpha-7
Included: commons-cli:commons-cli:jar:1.0
Included: org.codehaus.plexus:plexus-interactivity-api:jar:1.0-alpha-4
Included: org.codehaus.plexus:plexus-utils:jar:2.0.5
Included: org.apache.commons:commons-exec:jar:1.1
Excluded: org.apache.maven:maven-toolchain:jar:1.0
Excluded: org.apache.maven:maven-project:jar:2.0.6
Excluded: org.apache.maven:maven-settings:jar:2.0.6
Excluded: org.apache.maven:maven-profile:jar:2.0.6
Excluded: org.apache.maven:maven-plugin-registry:jar:2.0.6
Excluded: org.apache.maven:maven-model:jar:2.0.6
Excluded: org.apache.maven:maven-artifact:jar:2.0.6
Excluded: org.apache.maven:maven-artifact-manager:jar:2.0.6
Excluded: org.apache.maven:maven-repository-metadata:jar:2.0.6
Excluded: org.apache.maven:maven-core:jar:2.0.6
Excluded: org.apache.maven:maven-plugin-parameter-documenter:jar:2.0.6
Excluded: org.apache.maven:maven-error-diagnostics:jar:2.0.6
Excluded: org.apache.maven:maven-plugin-descriptor:jar:2.0.6
Excluded: org.apache.maven:maven-monitor:jar:2.0.6
Excluded: classworlds:classworlds:jar:1.1
Excluded: org.apache.maven:maven-plugin-api:jar:2.0.6
Excluded: org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9
Excluded: junit:junit:jar:3.8.2
Configuring mojo org.codehaus.mojo:exec-maven-plugin:1.2.1:exec from plugin realm ClassRealm[plugin>org.codehaus.mojo:exec-maven-plugin:1.2.1, parent: sun.misc.Launcher$AppClassLoader@5c647e05]
Configuring mojo 'org.codehaus.mojo:exec-maven-plugin:1.2.1:exec' with basic configurator -->
(f) basedir = C:\Users\Birger\Workspace\myproject
(f) classpathScope = runtime
(f) commandlineArgs = -Djava.library.path=lib\ -classpath %classpath com.mysite.myproject.Main
(f) executable = C:\Program Files\Java\jdk1.8.0_91\bin\java.exe
(f) longClasspath = false
(f) project = MavenProject: com.mysite:myproject:1.0-SNAPSHOT @ C:\Users\Birger\Workspace\myproject\pom.xml
(f) session = org.apache.maven.execution.MavenSession@2ef14fe
(f) skip = false
-- end configuration --
Collected project artifacts [jni4net:jni4net.j:jar:0.8.8.0:compile]
Collected project classpath [C:\Users\Birger\Workspace\myproject\target\classes]
dealing with jni4net:jni4net.j:jar:0.8.8.0:compile
Toolchains are ignored, 'executable' parameter is set to C:\Program Files\Java\jdk1.8.0_91\bin\java.exe
Executing command line: C:\Program Files\Java\jdk1.8.0_91\bin\java.exe -Djava.library.path=lib\ -classpath C:\Users\Birger\Workspace\myproject\target\classes;C:\Users\Birger\.m2\repository\jni4net\jni4net.j\0.8.8.0\jni4net.j-0.8.8.0.jar com.mysite.myproject.Main
Initialized!
Hello world!
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 1.360s
Finished at: Fri Jul 08 09:26:48 CEST 2016
Final Memory: 5M/245M
------------------------------------------------------------------------
尝试运行我构建的 .jar 时的命令行输出
C:\Users\Birger\Workspace\myproject\target>"C:\Program Files\Java\jdk1.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-0.8.8.0.dll: Can't load this .dll (machine code=0xbd) on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.mysite.myproject.Main.<clinit>(Main.java:11)
EDIT2:
对于希望重现此错误的任何人,可以找到 jni4net here。我用这个 Windows 批处理文件安装了 .jar:
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
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)
我在这里变得非常绝望(并且对 Java tbh 有点沮丧)
EDIT4:
试过这些命令,还是不行:
"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\repository\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\repository\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
【问题讨论】:
做一个小例子,重现其他人可以看到的问题。 尝试使用--debug
选项运行 Maven,这应该会为您提供有关 Maven 正在做什么的更多详细信息。
运行似乎没有找到 64 位的 dll,而是给出了 32 位的 dll,也许 NetBeans 在 32 位下运行它。 System.getProperties().list(System.out);
会显示该信息。选择“C:/Program Files (x86)/java/...”可能会有所帮助。
感谢您的关注,伙计们。有关 myproject 的完整源代码,请参阅我的问题更新,并运行输出。
在源代码中添加了System.getProperties().list(System.out);
,以便在运行 Netbeans/Maven 和从命令行时进行比较。输出实际上是相同的。
【参考方案1】:
我很久以前就遇到过这个问题。
只需删除 <filtering>true</filtering>
,这会在复制时损坏文件。 (漏洞 !!???)。
我能够重现您的问题。这也将解决您的问题
希望这会有所帮助。
【讨论】:
是的,这解决了错误。谢谢。到底什么是“过滤”,为什么要破坏 .dll? 过滤允许您为资源使用变量。他解释了maven.apache.org/plugins/maven-resources-plugin/examples/… 更具体地说,资源过滤尝试对插件处理的资源执行变量替换。即它在资源中查找并替换看起来像"$some.name"
的东西。如果您对非文本资源执行此操作,则可能会损坏它。这不是一个错误……它是一个特性。【参考方案2】:
显然,我的应用程序无法使用在编译期间复制的 .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>
【讨论】:
那么正确的方法应该是排除jni而不是关闭过滤。过滤是一种用来自 pom / maven 的值“替换”资源文件中的“变量”的方法。对多重配置很有用。我怀疑库文件中存在格式可变的文本,$likethis
我明白了。所以它正在用值替换公认的变量名?我认为我不会在lib
文件夹中放入任何适合此功能的内容。但我可以看到在其他情况下(资源文件夹)启用过滤和排除 .dll 会更好。以上是关于当我不能运行这个项目时,Maven 正在做啥样的魔法?的主要内容,如果未能解决你的问题,请参考以下文章
这个 wcf 服务正在运行……那是啥样的绑定?哪个是默认绑定?有人解释吗?
当我在 java 中使用 connection.setAutoCommit(false) 时,在 MySQL 上设置了啥样的锁?