2017-03-01 24 views
3

Java 1.8.0_121を実行しているJavaFX Mavenベースのプロジェクトから実行可能なjarを作成しようとしました。コマンド:mvn clean assembly:singleを使用します。 は、プロセスの間に、次の警告が出力されます。JavaFX Mavenアセンブリの警告:「プロジェクトの成果物を含めることはできません...関連するファイルまたはディレクトリがありません」

[WARNING] Cannot include project artifact: groupid:artifactid:jar:1.0-SNAPSHOT; it doesn't have an associated file or directory. 

たjarファイルが構築されたが、それは実行できませんでした。 java -jar product.jarを実行している場合は、次のエラーが印刷されていました:

Error: Could not find or load main class groupid.artifactid.MainClass 

ポンポンファイル:

<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>groupid</groupId> 
    <artifactId>artifactid</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <organization> 
     <name>org</name> 
    </organization> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 
    <build> 
     <finalName>product</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>3.0.0</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>groupid.artifactid.MainClass</mainClass> 
         </manifest> 
        </archive> 
        <finalName>product</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Iパッケージ構造groupid/artifactid/psvmのエントリポイントとMainClass.javaという名前のクラスがあることをダブルチェック。なぜこのようなことが起こり、どのように解決できるのでしょうか?

答えて

4

は私が前に追加のゴールをコンパイルしていると、コマンドに

mvn clean compile assembly:single 

違いを実行することで問題を解決してきました。 product.jarのファイルがtarget/になりました。これで警告が出力されなくなりました。 はしかし、別の警告が表示されるようになりました:

[WARNING] Replacing pre-existing project main-artifact file: /path/to/target/classes with assembly file: /path/to/target/product.jar 

この作品、なぜ誰かがを説明できますか?

+0

デフォルトのビルドサイクルのフェーズを指定しないと、プロジェクト自体のソースがjarにパッケージ化されていないため、jarが存在しないことを警告するmavenがトリガーされます。これは、なぜ** compile **フェーズを追加すると、プロジェクト自体のソースが最初にコンパイルされ、その後追加されることができるのかを説明します。最後の警告は、最終製品のjarファイルが元のプロジェクトと同じ名前になり、以前の実行不可能なビルド製品が上書きされるために発生します。 – Warkst

関連する問題