2017-05-16 47 views
2

尝试使用maven-assembly插件创建一个包含所有依赖项的胖jar文件。尝试了一堆东西,但最终与主类未找到错误。好像我碰到了一堵墙,现在在这里待了几个小时。运行由maven-assembly创建的可执行文件jar:错误:无法找到或加载主类

pom.xml片段:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foobar</groupId> 
    <artifactId>foobar</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <outputDirectory>/home/jars/foobar/</outputDirectory> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>com.foobar.Main</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies>...</dependencies> 
</project> 

Maven的命令执行:

mvn clean compile assembly:single

mvn package assembly:single

mvn clean compile package assembly:single

创建在/home/jars/foobar/foobar-1.0-SNAPSHOT-jar-with-dependencies.jar罐子如预期

MANIFEST.INFMETA-INF

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: user 
Created-By: Apache Maven 3.3.9 
Build-Jdk: 1.8.0_131 
Main-Class: com.foobar.Main 

爪哇命令执行:

java -jar foobar-1.0-SNAPSHOT-jar-with-dependencies.jar

java -cp foobar-1.0-SNAPSHOT-jar-with-dependencies.jar com.foobar.Main

java -jar foobar-1.0-SNAPSHOT-jar-with-dependencies.jar -cp com.foobar.Main

全部返回相同的错误:Error: Could not find or load main class com.foobar.Main

OS:Fedora 25

java -version 
openjdk version "1.8.0_131" 
OpenJDK Runtime Environment (build 1.8.0_131-b12) 
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode 

javac -version 
javac 1.8.0_121 

mvn --version 
Apache Maven 3.3.9 (NON-CANONICAL_2016-07-01T11:53:38Z_mockbuild; 2016-07-01T17:23:38+05:30) 
Maven home: /usr/share/maven 
Java version: 1.8.0_131, vendor: Oracle Corporation 
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-1.b12.fc25.x86_64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux", version: "4.10.13-200.fc25.x86_64", arch: "amd64", family: "unix" 

解决:

的问题是,源代码没有得到编译。无法在胖罐中找到源代码jar。看起来像maven认为一定的包装结构。

加入以下<build>解决这个问题:

<sourceDirectory>src/com/foobar</sourceDirectory> 
+1

试着看看.jar​​里面,看看Maven如何整理文件?你能看到你的班级吗?我为Spring引导应用程序构建了类似的问题,其中插件已将文件移动到兼容Spring引导的文件中,但无法使用“java -jar ...”运行 –

+0

结果如果您尝试使用' maven install'? –

+0

@MinhKieu就是这样!叹!似乎maven假定某个目录结构。通过添加''来解决它。如果你能回答这个问题,我会将它标记为正确的。 – user2354302

回答

1

的Maven插件并重组了JAR的春季启动兼容这可能会导致命令行“Java的罐子......”没有内容好好工作。当用户user2354302发现,添加src/com/foobar帮助。

相关问题