no main manifest attribute
Intellijによるjar作成の実行中。 jarを抽出し、アーティファクトの作成中に指定したものではなくanotherマニフェストファイルがあることを確認しました。
IDEでマニフェストを開くと、すべてが正しく表示されますが、jarを作成すると、まったく新しいマニフェストファイルが取得されます。
Manifest-Version: 1.0
Main-Class: YoutubeList
私は他の答えからすべてのソリューションを試してみましたが、それでもまだうまくいきませんでした。単純なjarの作成がIntellijのタスクの地獄である理由は、開発者を支援することになっています!
編集済み
また、Jarに.classファイルが含まれない場合があり、その結果could not found or load class
私は、Mavenビルドでも同じ問題に悩まされていました。プロジェクト構造設定(ctrl + alt + shift + S)から成果物を作成する場合、マニフェストディレクトリを変更する必要があります。
<project folder>\src\main\Java
change Javaリソースに
<project folder>\src\main\resources
ターゲットJARへのオプション抽出も使用しましたが、うまく機能しています。
[〜#〜] edit [〜#〜]
詳細なステップバイステップ、他の解決策はこちらにあります: https://stackoverflow.com/a/45303637/2640826
次のように、pom.xmlに参照され、完全修飾されたメインクラスがあることを確認します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>org.mypkg.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
(...もちろん、プラグインのバージョン番号は異なる場合があります)。
完全に修飾されていないメインクラスは、(参照をローカルで満たすために)マニフェストを別の場所に移動することを人々に勧めるものです。
私はそれを解決するために数日を費やしました。私の解決策: this answer にあるプロジェクトをロードしました。次に、ロードしたプロジェクトと自分のプロジェクトの設定を比較して修正しました。比較/修正しました:
最後に、META-INFをリソースディレクトリに配置しました。
たぶん私は余分な行動をしたが、それは私のために働いた:)
追伸また、Progect構造設定->モジュール->パスで「プロジェクトのコンパイル出力パスを継承」を選択する必要があります
META-INFフォルダーを*/resources
に入れることはできますが、そうではありません:Intellijはすべてをmain/resources
の下に置くか、 test/resources
生成されたjarのルートレベルにあるため、動作します。ただし、Javaプロジェクトでは、通常はsrc
と同じレベルのプロジェクトルートの下に配置します。 "リソース"の下に配置すると、慣例に違反します。リソースファイルではありません。
以下を確認してください:
MANIFEST.MF
ファイルを使用します。Include in Project build
にチェックマークを付けましたMETA-INF
タブに、「プロジェクトコンパイル済み出力」とは別に、jarに含めるファイルにOutput Layout
フォルダーがリストされているそして、設定を保存し、再度ビルドします、そして「ビルド」メニューに入り「アーティファクトをビルドします。」、そしてJARを「ビルド」します。生成されたjarを再度確認し、Java -jar
で実行します。
実際、build.gradle
に次の行を追加することで解決しました
jar {
manifest {
attributes 'Main-Class': 'class name'
}
from {
configurations.compile.collect {
it.isDirectory()? it: zipTree(it)
}
}
}
File
/Project structure
/Artifacts
jarのビルド方法を指定できます。マニフェストとして既存のファイルを使用するか、新しいファイルを作成するかを選択できます。この場合、メインクラスとクラスパスを指定します...