Maven清单文件排除了完整的JAR路径

时间:2016-05-24 10:23:49

标签: java maven intellij-idea jar

我正在构建一个' Maven模块'项目有2个模块。

  • 模块A
  • 模块B

模块B是使用模块A的人,当我运行模块B主类时,它运行完美。但是当我尝试从中构建JAR时,JAR在Manifest文件中包含了无效的类路径jar。

模块B POM

<build>
   <plugins>
      <plugin>
         <!-- Build an executable JAR -->
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>3.0.0</version>
         <configuration>
            <archive>
               <manifest>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
                  <mainClass>com.example.main.Main</mainClass>
               </manifest>
            </archive>
         </configuration>
      </plugin>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>2.10</version>
         <executions>
            <execution>
               <phase>package</phase>
               <goals>
                  <goal>copy-dependencies</goal>
               </goals>
               <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>

生成的清单文件

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Someone
Class-Path: lib/com/example/a/1.0.0/module-a-1.0.0.jar lib/com/1stl
 eg/jnativehook/2.0.2/jnativehook-2.0.2.jar lib/org/json/json/20160212
 /json-20160212.jar lib/org/glassfish/jersey/core/jersey-client/2.22.2
 /jersey-client-2.22.2.jar lib/javax/ws/rs/javax.ws.rs-api/2.0.1/javax
 .ws.rs-api-2.0.1.jar lib/org/glassfish/jersey/core/jersey-common/2.22.......

正如我所看到的那样,“类路径”还有其他途径。如何将其修改为仅包含jar名称?

我正在执行&#39; mvn clean install &#39;

3 个答案:

答案 0 :(得分:0)

我发现添加以下插件的解决方案将包含单个JAR所需的JAR

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-assembly-plugin</artifactId>
   <version>2.4</version>
   <configuration>
      <archive>
         <manifest>
            <mainClass>com.example.main.Main</mainClass>
         </manifest>
      </archive>
      <descriptorRefs>
         <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
   </configuration>
   <executions>
      <execution>
         <id>make-assembly</id>
         <phase>package</phase>
         <goals>
            <goal>single</goal>
         </goals>
      </execution>
   </executions>
</plugin>

答案 1 :(得分:0)

如果您不想编辑pom.xml,可以使用mvn package assembly:single 进行相同操作。此命令还会将所有依赖项复制到.jar文件中。

答案 2 :(得分:-1)

您的问题是,在您的任何父POM中,已配置以下<classpathLayoutType>repository</classpathLayoutType>。将其删除或覆盖simple