我有一个非常简单(简短)的程序,编译时以某种方式26.9 MB?
我的程序使用一个main.java
:
}
为什么我的程序如此之大?
答案 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中,因此您可以运行您的程序无需关心运行时的类路径。
为了减小罐子的大小,我可以建议以下方法:
减少外部库(导入的类)的数量。例如,不要包含 java.io。* ,而只包括您实际使用的课程。
使用ant或maven构建适当的编译脚本。然后你的jar将只包括你的类,并且相对于你现在拥有的将是非常小的。但是,要运行代码,您需要关心在运行时拥有所有必需的库。