罐子里用maven制作罐子

时间:2018-05-13 20:27:19

标签: java maven jar

我正在尝试为我的应用创建.jar。这个应用程序包含许多东西,如另一个.jar。

在我的pom配置中使用此插件:

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.rilent.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

我有这个链接到本地​​jar

    ...
    <dependency>
        <groupId>it.sauronsoftware.jave</groupId>
        <artifactId>jave</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/src/main/resources/jave-1.0.2.jar</systemPath>
    </dependency>

我正在使用此命令构建我的应用程序,该应用程序返回BUILD SUCCESS:

 mvn clean compile assembly:single

但是当我尝试执行我的程序时,它会在某些时候崩溃,并返回此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: it/sauronsoftware/jave/InputFormatException
( a class from the .jar)

我尝试解压缩我的主jar以查看其内容: enter image description here

我创建jar的方式有什么问题?

编辑@ThorbjørnRavnAndersen

我也尝试过这种方式,我把它添加到我的pom中:

<!-- https://mvnrepository.com/artifact/com.jolira/onejar-maven-plugin -->
<dependency>
    <groupId>com.jolira</groupId>
    <artifactId>onejar-maven-plugin</artifactId>
    <version>1.4.4</version>
</dependency>

然后我用mvn compile进行编译,当我尝试运行.jar时出现此错误

no main manifest attribute, in .\myapp-0.0.1-SNAPSHOT.jar 我又做错了什么......?

注意:我的jar还包含.exe

1 个答案:

答案 0 :(得分:0)

标准类加载器无法从jar中的jar加载类。无法从jar内部运行EXE文件。

这并不意味着它是不可能的,但有点麻烦,可能高于你目前的技能水平。您可能会发现One Jar(http://one-jar.sourceforge.net/)很有趣,因为它可以完全自动化。

对于Maven项目,我在使用appassembler创建部署结构和脚本方面有很好的经验。 http://www.mojohaus.org/appassembler/appassembler-maven-plugin/