27503


IntelliJ でJavaアプリケーションを開発しているのですが、  
mavenではない普通のプロジェクトはartifactsから生成したjarでmain classも指定でき、  
実行コマンドでそのまま動作させることが出来るのですが

mavenプロジェクトの場合は同じよにしてもマニフェストにMainクラスが定義されていないとエラーになり実行できません。

jarを分解して.MFを見てみても確かにメインクラスの記述が抜けていました  
どうすればIntelliJのMavenプロジェクトのartifactsで生成したjarのマニフェストにmain classを定義できるのでしょうか？


CC BY-SA 3.0
2016-07-10T07:51:38.837
27498
2016-07-10T11:02:32.853
10346
question
java maven intellij-idea
IntelliJ の maven プロジェクトで Main Class をマニフェストに記述する方法


Mavenの場合、JAR Pluginを使えばMain Classを指定できます。

Apache Maven JAR Plugin  
<https://maven.apache.org/plugins/maven-jar-plugin/>

* * *

以下は簡単な使用例です。

**ディレクトリ構成**

[code]

    Maven
    |   pom.xml
    \---src
        \---main
            \---java
                \---com
                    \---harry0000
                            Main.java
    
[/code]

**src/main/java/com/harry0000/Main.java**

[code]

    package com.harry0000;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println("Hello, maven.");
        }
    }
    
[/code]

**pom.xml**

[code]

    <?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.harry0000</groupId>
        <artifactId>Maven</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.harry0000.Main</mainClass>
                                <addClasspath>true</addClasspath>
                                <addExtensions>false</addExtensions>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
[/code]

pluginの`<configuration>/<archive>/<manifest>/<mainClass>`にclassを指定します。  
(例では`com.harry0000.Main`)

[Usage](https://maven.apache.org/plugins/maven-jar-
plugin/usage.html)ページにある通り、`mvn package`を実行すれば`target`ディレクトリに実行可能なjarが生成されます。

[code]

    D:\Maven> mvn package
    
    (中略)
    
    D:\Maven> java -jar .\target\Maven-1.0-SNAPSHOT.jar
    Hello, maven.
    
[/code]

IntelliJからjarを生成する場合は下記の通りです。

  1. `[View] - [Tool Windows] - [Maven Projects]`を選択
  2. 対象Projectの`Lifecycle`にある`package`を右クリックし、`Run 'Maven[package]'`を実行

* * *

pluginの`<configuration>/<archive>`に設定する値の詳細は下記ページを参照してください。

Apache Maven Archiver  
<https://maven.apache.org/shared/maven-archiver/index.html>


CC BY-SA 3.0
2016-07-10T11:02:32.853
27503
2016-07-10T11:02:32.853
3068
27498
answer