mvn输出jar文件只能在目标文件夹中执行

时间:2018-03-07 03:10:27

标签: maven

我有一个mvn构建的jar,它在目标文件夹中工作正常。

但是,如果我将jar复制到不同的文件夹/ machine.I得到一个类找不到异常。我知道jar无法访问依赖项。我怎样才能解决这个问题? 我的pom包含,

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
            <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
            <goal>copy-dependencies</goal>
            </goals>
            <configuration>
            <configuration>
            <!-- exclude junit, we need runtime dependency only -->
            <includeScope>runtime</includeScope>
            <outputDirectory>${project.build.outputDirectory}/dependency/
            </outputDirectory>
            </configuration>
            </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>
            <mainClass>com.Main</mainClass>

            <classpathPrefix>dependency/</classpathPrefix>

            </manifest>
            </archive>
            </configuration>
            </plugin>

先谢谢, Saranya

2 个答案:

答案 0 :(得分:0)

使用maven-assembly-plugin创建一个包含依赖项的胖jar:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <!-- bind to the packaging phase -->
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>

目标文件夹会有额外的jar-with-dependencies.jar;你应该可以在任何地方使用它。

答案 1 :(得分:0)

我从我的pom中删除了maven jar和依赖插件。加入

 <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.importer.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>xyz</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance 
      merges -->
                        <phase>package</phase> <!-- bind to the packaging phase 
       -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

这创建了一个具有依赖关系的jar,可以在任何地方执行。还有特定的jar名称。