1

jar ファイルをスタンドアロン アプリケーションとして実行したい。以下のコマンドを実行すると、次のエラー メッセージが表示されます。

[rcbandit@Laptop target]$ /opt/jdk1.8.0/bin/java -jar DX57DC-1.0.jar
no main manifest attribute, in DX57DC-1.0.jar
[rcbandit@Laptop target]$ 

これはPOM構成です:

<?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.dx57dc</groupId>
    <artifactId>DX57DC</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>DX57DC</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mainClass></mainClass>
    </properties>

    <organization>
        <name>Corporation Name</name>
    </organization>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <excludeScope>system</excludeScope>
                            <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.zenjava</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <mainClass>com.dx57dc.main.DX57DC</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Mavenプラグインが不足していると思います。これを修正する方法を教えてください。

4

4 に答える 4

2

次のように jar を作成します。

  • コマンドプロンプトまたはターミナルを開き、すべてのクラスが保存されているディレクトリを見つけます
  • 次のコマンドを入力します。

    jar cfev YourJarName.jar EntryClass *

または、クラスが何らかのパッケージに含まれている場合、

  • パッケージ フォルダーの外に移動し、次のコマンドを実行します。

    jar cfev YourJarName.jar YourPackage.EntryClass YourPackage/*

これにより、jar ファイルが作成されます。ダブルクリックしても瓶が開かない場合は、

  • ターミナルまたは Cmd で、jar ファイルが保存されているディレクトリを見つけて、次のコマンドを実行します。

    java -jar YourJarName.jar args

ここでのオプションは次のとおりです。

    -c  create new archive
    -f  specify archive file name
    -e  specify application entry point for stand-alone application
        bundled into an executable jar file
    -v  generate verbose output on standard output

これが役立つことを願っています。

于 2016-07-14T17:09:46.903 に答える
2

jar には、実行可能な main() 関数を指定するマニフェストが含まれていないため、Java は実行/開始するクラスを認識していません。

Maven を使用する場合は、アセンブリ プラグインを参照してください。これにより、正しいマニフェストで jar を作成できます。

または、次のコマンドでプログラムを開始します。java -cp DX57DC-1.0.jar 'your_main_class_here'

よろしく、

マイク

于 2013-08-23T20:35:16.590 に答える
1

次のようなものをプラグインに追加してみてください。

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>attached</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <mainClass>com.package.to.my.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
于 2013-08-23T20:36:04.847 に答える
1

JAR ファイルを実行可能Main-Classにするには、次のClass-Pathエントリを含むマニフェスト ファイルが必要です。

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>my.package.App</mainClass>               
                    </manifest>           
                </archive>
                <executions>
                    <execution>
                        <id>default-package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </configuration>
        </plugin>

これにより、jar ファイルのルートにある directory のMANIFEST.MF下にファイルが生成されます。META-INF関連するエントリのみがリストされています:

Class-Path: lib/somejar.jar
Main-Class: my.package.App

Class-Pathjarファイルが存在するディレクトリにlib、ファイルを含むフォルダーが存在すると述べていますsomejar.jar

Main-ClassファイルApp.classがパッケージ my.packageに存在し、そのメソッドmainが実行されることを示します。

アップデート

libフォルダーが存在しない場合、最初の依存クラスが読み込まれるときに実行が失敗します。これを回避するには、シェードプラグインを使用してすべての依存関係を jar にパックします。

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>my.package.App</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

すべての依存関係がまとめられているため、Class-Pathエントリはもう必要ありません。

于 2013-08-23T20:36:27.903 に答える