簡體   English   中英

從intellij輸出的jar文件不能在其原始位置之外運行

[英]Jar file output from intellij can't be run outside its original location

我已經編寫了一個javafx應用程序,並通過Intellij的“構建工件”功能構建了一個jar文件。 現在,如果我在輸出文件夾中運行jar文件,如下所示:

java -jar IdeaProjects/Transclip/out/artifacts/Transclip/Transclip.jar

一切正常,但是如果我將其復制到其他地方:

cp  IdeaProjects/Transclip/out/artifacts/Transclip/Transclip.jar  .IdeaProjects/Transclip/out/artifacts/Transclip/Transclip.jar -> ./Transclip.jar
java -jar Transclip.jar

然后我得到了很多錯誤:

Exception in Application constructor
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class sample.Main
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:884)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at com.sun.javafx.application.LauncherImpl$7.run(LauncherImpl.java:791)
    at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/collections4/BidiMap
    at sample.Main.<init>(Main.java:48)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.BidiMap
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 12 more
Exception running application sample.Main

知道這里發生了什么嗎?

這是MANIFEST.MF的內容:

Manifest-Version: 1.0
Main-Class: sample.Main

這是文件結構:

.
├── Transclip.iml
├── libs
│   ├── commons-collections4-4.0.jar
│   └── gson-2.2.4.jar
├── out
│   ├── artifacts
│   │   ├── Transclip
│   │   │   ├── Transclip.html
│   │   │   ├── Transclip.jar
│   │   │   ├── Transclip.jnlp
│   │   │   ├── commons-collections4-4.0.jar
│   │   │   └── gson-2.2.4.jar
│   │   └── Transclip_jar
│   │       └── Transclip.jar
│   └── production
│       └── Transclip
│           ├── META-INF
│           │   └── MANIFEST.MF
│           ├── com
│           │   ├── detectlanguage
│           │   │   ├── Client.class
│           │   │   ├── DetectLanguage.class
│           │   │   ├── Result.class
│           │   │   ├── errors
│           │   │   │   └── APIError.class
│           │   │   └── responses
│           │   │       ├── BatchDetectResponse.class
│           │   │       ├── BatchDetectionsData.class
│           │   │       ├── DetectResponse.class
│           │   │       ├── DetectionsData.class
│           │   │       ├── ErrorData.class
│           │   │       ├── ErrorResponse.class
│           │   │       ├── Response.class
│           │   │       └── StatusResponse.class
│           │   └── gtranslate
│           │       ├── Audio.class
│           │       ├── Language.class
│           │       ├── Main.class
│           │       ├── Translator.class
│           │       ├── URLCONSTANTS.class
│           │       ├── parsing
│           │       │   ├── Parse.class
│           │       │   ├── ParseTextDetect.class
│           │       │   └── ParseTextTranslate.class
│           │       ├── text
│           │       │   ├── Text.class
│           │       │   └── TextTranslate.class
│           │       └── utils
│           │           └── WebUtils.class
│           ├── javazoom
│           │   └── jl
│           │       ├── converter
│           │       │   ├── Converter$PrintWriterProgressListener.class
│           │       │   ├── Converter$ProgressListener.class
│           │       │   ├── Converter.class
│           │       │   ├── RiffFile$RiffChunkHeader.class
│           │       │   ├── RiffFile.class
│           │       │   ├── WaveFile$WaveFileSample.class
│           │       │   ├── WaveFile$WaveFormat_Chunk.class
│           │       │   ├── WaveFile$WaveFormat_ChunkData.class
│           │       │   ├── WaveFile.class
│           │       │   ├── WaveFileObuffer.class
│           │       │   ├── jlc$jlcArgs.class
│           │       │   └── jlc.class
│           │       ├── decoder
│           │       │   ├── BitReserve.class
│           │       │   ├── Bitstream.class
│           │       │   ├── BitstreamErrors.class
│           │       │   ├── BitstreamException.class
│           │       │   ├── Control.class
│           │       │   ├── Crc16.class
│           │       │   ├── Decoder$Params.class
│           │       │   ├── Decoder.class
│           │       │   ├── DecoderErrors.class
│           │       │   ├── DecoderException.class
│           │       │   ├── Equalizer$EQFunction.class
│           │       │   ├── Equalizer.class
│           │       │   ├── FrameDecoder.class
│           │       │   ├── Header.class
│           │       │   ├── InputStreamSource.class
│           │       │   ├── JavaLayerError.class
│           │       │   ├── JavaLayerErrors.class
│           │       │   ├── JavaLayerException.class
│           │       │   ├── JavaLayerHook.class
│           │       │   ├── JavaLayerUtils.class
│           │       │   ├── LayerIDecoder$Subband.class
│           │       │   ├── LayerIDecoder$SubbandLayer1.class
│           │       │   ├── LayerIDecoder$SubbandLayer1IntensityStereo.class
│           │       │   ├── LayerIDecoder$SubbandLayer1Stereo.class
│           │       │   ├── LayerIDecoder.class
│           │       │   ├── LayerIIDecoder$SubbandLayer2.class
│           │       │   ├── LayerIIDecoder$SubbandLayer2IntensityStereo.class
│           │       │   ├── LayerIIDecoder$SubbandLayer2Stereo.class
│           │       │   ├── LayerIIDecoder.class
│           │       │   ├── LayerIIIDecoder$III_side_info_t.class
│           │       │   ├── LayerIIIDecoder$SBI.class
│           │       │   ├── LayerIIIDecoder$Sftable.class
│           │       │   ├── LayerIIIDecoder$gr_info_s.class
│           │       │   ├── LayerIIIDecoder$temporaire.class
│           │       │   ├── LayerIIIDecoder$temporaire2.class
│           │       │   ├── LayerIIIDecoder.class
│           │       │   ├── Manager.class
│           │       │   ├── Obuffer.class
│           │       │   ├── OutputChannels.class
│           │       │   ├── SampleBuffer.class
│           │       │   ├── Source.class
│           │       │   ├── SynthesisFilter.class
│           │       │   ├── au2lin.ser
│           │       │   ├── huffcodetab.class
│           │       │   ├── l3reorder.ser
│           │       │   ├── lin2au.ser
│           │       │   ├── readme.txt
│           │       │   └── sfd.ser
│           │       └── player
│           │           ├── AudioDevice.class
│           │           ├── AudioDeviceBase.class
│           │           ├── AudioDeviceFactory.class
│           │           ├── FactoryRegistry.class
│           │           ├── JavaSoundAudioDevice.class
│           │           ├── JavaSoundAudioDeviceFactory.class
│           │           ├── NullAudioDevice.class
│           │           ├── Player.class
│           │           ├── PlayerApplet.class
│           │           ├── advanced
│           │           │   ├── AdvancedPlayer.class
│           │           │   ├── PlaybackEvent.class
│           │           │   ├── PlaybackListener.class
│           │           │   ├── jlap$1.class
│           │           │   ├── jlap$InfoListener.class
│           │           │   └── jlap.class
│           │           └── jlp.class
│           └── sample
│               ├── LangMap.class
│               ├── Main$1.class
│               └── Main.class
├── readme.md
├── resources
│   └── images
│       └── Transclip.svg
└── src
    ├── META-INF
    │   └── MANIFEST.MF
    ├── com
    │   ├── detectlanguage
    │   │   ├── Client.java
    │   │   ├── DetectLanguage.java
    │   │   ├── Result.java
    │   │   ├── errors
    │   │   │   └── APIError.java
    │   │   └── responses
    │   │       ├── BatchDetectResponse.java
    │   │       ├── BatchDetectionsData.java
    │   │       ├── DetectResponse.java
    │   │       ├── DetectionsData.java
    │   │       ├── ErrorData.java
    │   │       ├── ErrorResponse.java
    │   │       ├── Response.java
    │   │       └── StatusResponse.java
    │   └── gtranslate
    │       ├── Audio.java
    │       ├── Language.java
    │       ├── Main.java
    │       ├── Translator.java
    │       ├── URLCONSTANTS.java
    │       ├── parsing
    │       │   ├── Parse.java
    │       │   ├── ParseTextDetect.java
    │       │   └── ParseTextTranslate.java
    │       ├── text
    │       │   ├── Text.java
    │       │   └── TextTranslate.java
    │       └── utils
    │           └── WebUtils.java
    ├── javazoom
    │   └── jl
    │       ├── converter
    │       │   ├── Converter.java
    │       │   ├── RiffFile.java
    │       │   ├── WaveFile.java
    │       │   ├── WaveFileObuffer.java
    │       │   └── jlc.java
    │       ├── decoder
    │       │   ├── BitReserve.java
    │       │   ├── Bitstream.java
    │       │   ├── BitstreamErrors.java
    │       │   ├── BitstreamException.java
    │       │   ├── Control.java
    │       │   ├── Crc16.java
    │       │   ├── Decoder.java
    │       │   ├── DecoderErrors.java
    │       │   ├── DecoderException.java
    │       │   ├── Equalizer.java
    │       │   ├── FrameDecoder.java
    │       │   ├── Header.java
    │       │   ├── InputStreamSource.java
    │       │   ├── JavaLayerError.java
    │       │   ├── JavaLayerErrors.java
    │       │   ├── JavaLayerException.java
    │       │   ├── JavaLayerHook.java
    │       │   ├── JavaLayerUtils.java
    │       │   ├── LayerIDecoder.java
    │       │   ├── LayerIIDecoder.java
    │       │   ├── LayerIIIDecoder.java
    │       │   ├── Manager.java
    │       │   ├── Obuffer.java
    │       │   ├── OutputChannels.java
    │       │   ├── SampleBuffer.java
    │       │   ├── Source.java
    │       │   ├── SynthesisFilter.java
    │       │   ├── au2lin.ser
    │       │   ├── huffcodetab.java
    │       │   ├── l3reorder.ser
    │       │   ├── lin2au.ser
    │       │   ├── readme.txt
    │       │   └── sfd.ser
    │       └── player
    │           ├── AudioDevice.java
    │           ├── AudioDeviceBase.java
    │           ├── AudioDeviceFactory.java
    │           ├── FactoryRegistry.java
    │           ├── JavaSoundAudioDevice.java
    │           ├── JavaSoundAudioDeviceFactory.java
    │           ├── NullAudioDevice.java
    │           ├── Player.java
    │           ├── PlayerApplet.java
    │           ├── advanced
    │           │   ├── AdvancedPlayer.java
    │           │   ├── PlaybackEvent.java
    │           │   ├── PlaybackListener.java
    │           │   └── jlap.java
    │           └── jlp.java
    └── sample
        ├── LangMap.java
        └── Main.java

42 directories, 192 files

從構建的輸出目錄執行jar文件時,它將在同一目錄中找到commons-collection依賴項。 當您將jar文件復制到其他位置並在那里執行時,它不再能找到commons-collection依賴項。 這就是為什么它拋出ClassNotFoundException的原因。 您還需要復制依賴關系,而不僅僅是jar。

您還應該考慮將其作為構建的一部分,以便將依賴項復制到構建輸出的lib文件夾中,並且清單文件知道引用lib文件夾中的依賴項。 如果不想使用所有必需的依賴項更新最完整的表,則必須在java命令的-classpath參數中指定它們,如果依賴項數量增加,則不理想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM