Java为什么我的jar文件如此之大?

时间:2016-07-04 23:05:23

标签: java

我有一个非常简单(简短)的程序,编译时以某种方式26.9 MB?

我使用了一个在线java反编译器,所有这些都出现了: imgur link

我的程序使用一个main.java

的java文件

}

为什么我的程序如此之大?

2 个答案:

答案 0 :(得分:1)

如上所述,IntelliJ会将依赖项打包到创建的JAR文件中。您可以通过提取JAR jar xf file.jar文件并查看内容来看到这一点。

你可以做的是(按照建议)使用Maven(https://maven.apache.org/install.html),这将允许你创建依赖关系,然后你可以提供给类路径上的代码。

使用IntelliJ单击文件>新>项目,

从列表中选择Maven并选择Project SDK。

接下来给你的项目一个组ID(com.company)和工件ID(myproject);暂时保留版本。

现在,为项目提供一个本地名称(这将是在IdeaProjects目录中创建的文件夹。

IntelliJ会向您弹出一条消息,说明需要导入Maven项目",我始终启用自动导入,然后只维护pom.xml文件。

这会创建一个项目,找到你的pom.xml文件:它看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>2.53.1</version><!-- Pick a different version if needed -->
        </dependency> 
    </dependencies>
</project>

现在,您可以通过从终端运行mvn package打包项目,并将jar文件保存到target目录中。它将非常小,因为它只包含您的代码。

要运行该程序,您可以执行以下操作:

mvn exec:java -Dexec.mainClass="com.company.Test" -Dexec.args="space separated arguments"

答案 1 :(得分:0)

您的代码中似乎正在使用大量外部库(现在当您提供的代码似乎是由Selenium提取时)并且intellij将它们一起打包到一个jar中,因此您可以运行您的程序无需关心运行时的类路径。

为了减小罐子的大小,我可以建议以下方法:

  1. 减少外部库(导入的类)的数量。例如,不要包含 java.io。* ,而只包括您实际使用的课程。

  2. 使用ant或maven构建适当的编译脚本。然后你的jar将只包括你的类,并且相对于你现在拥有的将是非常小的。但是,要运行代码,您需要关心在运行时拥有所有必需的库。