2016-07-04 16 views
0

コンパイル時に何とか26.9 MBの非常にシンプルな(そして短い)プログラムがありますか?Javaなぜ私のjarファイルはとても大きいのですか?

私はオンラインJavaの逆コンパイラを使用して、すべてこれが思い付いた: imgur link

私のプログラムはmain.javaある1つのJavaファイルを使用しています:

を}

なぜ私のプログラムは非常に大きいのですか?

+0

(あなたが作成した)これはあなたのjarファイルまたは一部のサードパーティ製の瓶ですか? – TMG

+0

どのように瓶を作りますか? –

+4

このJARにはおそらくいくつかの依存ライブラリが含まれています。 "あなたの簡単なプログラム"の他に –

答えて

1

上記のように、IntelliJは作成したJARファイルに依存関係をパッケージ化します。これは、JAR jar xf file.jarファイルを抽出して内容を見て確認できます。

あなたができることはMaven(https://maven.apache.org/install.html)を使って(推奨されるように)、依存パスを作成してクラスパス上のコードに渡すことができます。

IntelliJのをクリックして[ファイル]> [新規]> [プロジェクトでは、

は、リストからMavenを選択し、プロジェクトの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> 

:それは次のようになります実行中0123端末からのと、あなたのjarファイルはtargetディレクトリに保存されます。それはあなたのコードだけを含むので、非常に小さくなります。プログラムを実行するには

、あなたは次のことが可能です。

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

0

あなたのコードでは、(あなたがコードをSeleniumによって引っ張られたように見えるようにした)多くの外部ライブラリを使用しているようで、intellijはそれらを1つのjarに親切にパックしているので、実行時にクラスパスを気にする必要があります。あなたのjarファイルのサイズを小さくする

私は、以下のアプローチを提案することができます:

  1. は、外部ライブラリ(インポートされたクラス)の量を減らします。たとえば、java.io. *は含まず、実際に使用しているクラスのみを含めてください。

  2. antまたはmavenを使用して適切なコンパイルスクリプトを作成します。あなたの瓶にはあなたの授業だけが含まれ、あなたが今持っているものと比べて非常に小さくなります。ただし、コードを実行するには、実行時に必要なすべてのライブラリが必要になるかどうかを気にする必要があります。

+0

彼のコードにそのような 'org.apache.commons。*'はありません。 –

+0

私はあなたが最初からそれを提供しなかったので、このコードで何を持っているのか分かりませんでした。しかし、注意深く読んでください、その例です!クラスが1つだけ必要な場合は、完全な名前空間を含めないでください。 –

+0

このコードは質問に記載されています。注意深くお読みください。それは私のものではありません。 –

関連する問題