有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

maven如何从外部文件夹java复制依赖项

如何从同一jar目录(不是build目录)中的/lib文件夹复制依赖项,我使用的是:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>../lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

我被发现了

java.lang.NoClassDefFoundError: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:133) ~[patched.jar:git-PaperSpigot-"4c7641d"]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:331) ~[patched.jar:git-PaperSpigot-"4c7641d"]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:254) [patched.jar:git-PaperSpigot-"4c7641d"]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:293) [patched.jar:git-PaperSpigot-"4c7641d"]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:202) [patched.jar:git-PaperSpigot-"4c7641d"]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:563) [patched.jar:git-PaperSpigot-"4c7641d"]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_281]
Caused by: java.lang.NoClassDefFoundError: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap

文件管理器: Image of how jar path and lib folder looks


共 (2) 个答案

  1. # 1 楼答案

    有多种方法可以将本地jar文件添加到Maven项目中,如下所示:

    一,。直接将依赖项添加为系统范围:

    假设罐子位于<;项目根文件夹>/在pom中添加依赖项。xml:

    <dependency>
      <groupId>com.example.examples</groupId>
      <artifactId>example-jar</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${basedir}/lib/your_jar.jar</systemPath>
    </dependency>
    

    二,。将JAR安装到本地Maven存储库中

    例如:

    mvn install:install-file –Dfile=C:\jar_directory\your_jar.jar -DgroupId=com.example.test -DartifactId=example-jar -Dversion=1.0
    

    接下来,将依赖项添加到Maven项目中:

    <dependency>
      <groupId>com.example.examples</groupId>
      <artifactId>example-jar</artifactId>
      <version>1.0</version>
    </dependency>
    
  2. # 2 楼答案

    如果我现在理解为OK,那么当您尝试执行生成的jar时,会抛出该异常。如果是这样的话,maven依赖插件看起来很好,但您可能没有将lib文件夹名称添加到生成的jar的类路径中:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.4</version>
      <executions>
        <execution>
          <id>default-jar</id>
          <goals>
            <goal>jar</goal>
          </goals>
          <phase>package</phase>
          <configuration>
            <finalName>${jar.name}-${project.version}</finalName>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>  
                <mainClass>com.example.main.MainClass</mainClass>
              </manifest>
            </archive>
          </configuration>
        </execution>
      </plugin>
    

    ${jar.name}和${project.version}是之前定义的变量,可以用jar所需的名称替换。还有com。实例主要的MainClass只是一个必须用Main类替换的示例