2017-07-17 7 views
0

Google Guavaを設定するための新しいプロジェクトを作成しました。Google Guavaを使用するとJARのメインクラスのスローエラーが発生する

これは私のPOM.xmlです。

<dependencies> 
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>20.0</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>InetAddressTest</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

これは私の主な方法です。

public static void main(String[] args) throws Exception { 
    try { 
     System.out.println(InetAddresses.isInetAddress("127.0.0.1")); 
    } catch (NoClassDefFoundError exp) { 
     System.out.println(exp); 
    } 
} 

私はIDE内で実行することができます。私はそれjava -jar target/<NAME>.jarを実行すると

私はmvn package

でそれをパッケージ化することができ、それは私が解決策を閲覧しようとした例外java.lang.NoClassDefFoundError: com/google/common/net/InetAddresses

をスローします。しかし、彼らはこれまでに働いていません。

私はGuavaのいくつかの依存関係が欠けていると推測しています(他の問題に基づいています)?

java -jar -classpath .:./{path_to_gauva_jar} target/<name>.Jar 

変更セパレーターを使用しているオペレーティング・システムごとに:

+0

あなたはjarファイルをパッケージ化すると、あなたは依存関係だけでなく、その一部をパッケージ化する必要があります。 – OTM

+0

もご覧ください。 https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven – OTM

+0

ありがとうございます@OTM私はそれをしました。 – william

答えて

1

次の2つのオプションがあります: - すべての必要なjarファイルを一覧表示する-cpまたは-classpathオプションを使用するJavaコマンドの実行時に

1)。

2)あなたのpom.xmlにMavenのシェードプラグインを使用してjarファイル内のすべての依存関係を含める

<plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.4.2</version> 
       <configuration> 
        <finalName>uber-${project.artifactId}-${project.version}</finalName> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
1

google guavaそのもののように見えますが、あなたのjavaコマンドを以下のようにクラスパスを設定してみてください、クラスパスにありません。