2017-01-09 9 views
1

非常に一般的な見出しと長い説明に従っていただければ幸いです。これと答えを読んだ人には、事前に感謝します。EclipseでコマンドラインにJavaアプリケーションがうまくいきません

私はVM引数とコマンドライン引数をとるアプリケーションを持っています。これはmavenプロジェクトです。私はJavaアプリケーション実行コンフィギュレーションからeclipseで実行します。問題ない。 PDFファイルを作成し、System.out()呼び出しを実際にSTDOUTに出力します。ロギング・コールは、Eclipseコンソールに印刷します。すべて期待どおり。

私は(私は、Windows 7上のgit bashシェルを使用しています)のmavenでビルドする:

$ mvn clean compile package 

ジャー内のすべての依存関係で構築されており、persistence.xmlのファイルが含まれています。コマンドラインから実行します。

$ java -jar target/dne-caprs-reports-0.0.1-SNAPSHOT.jar \ 
    -Dgov.ssa.dne.reportdir=C:\temp\ upcoming_changes 

エラーはありません。ハワイ。しかし、PDFとSTDOUTのメッセージはありません。 STDOUTにはいくつかのメッセージがあるはずです。私はPDFファイルの全ファイルシステムを検索し、予期せぬどこかで出力された場合に備えていました。何もない。

私はLinuxのボックスにjarファイルをftpし、同じ方法で実行しました(明らかに別のreportdirを使って)、同じ結果が得られました。 PDFはありません。 STDOUTはありません。ロギングなし(ロギングを正しく行ったかどうかはわかりませんが)。

「うまくいかない」とは、STDOUTに出力されず、PDFファイルが作成されないことを除いて、アプリケーションが正常に動作するように見えることを意味します。そして何のエラーもありません。

メインクラス:RunReport.java: -

package gov.ssa.dne.app; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 

import gov.ssa.dne.reports.ChangeStatusReport; 
import gov.ssa.dne.reports.OpenChangesReport; 
import gov.ssa.dne.reports.OpenProblemReport; 
import gov.ssa.dne.reports.UpcomingChangesReport; 

public class RunReport { 

public static void main(String[] reports) { 

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("dne-caprs-reports"); 
    EntityManager em = factory.createEntityManager(); 

    if (reports[0].toString().equals("change_status")) { 
     ChangeStatusReport report = new ChangeStatusReport(em, "DNE Change Status"); 
     System.out.println("CHANGE STATUS REPORT"); 
     report.generateReport(); 
    } 


} 

}

ChangeStatusReport.java詳細は簡潔にするため削除:

public class ChangeStatusReport { 

    private EntityManager em; 
    private List<Sc6cm3rm1> changeList = new ArrayList<Sc6cm3rm1>(); 
    private Cell cell; 
    private Table table; 
    private String title; 
    private static final Logger LOGGER = Logger.getLogger(ChangeStatusReport.class.getName()); 

    public ChangeStatusReport(EntityManager em, String title) { 
     this.em = em; 
     this.title = title; 
    } 

    public void generateReport() { 
     Query q = em.createNativeQuery(NativeQueries.DNE_CHANGE_STATUS, Sc6cm3rm1.class); 
     changeList = q.getResultList(); 
     createPdf(); 
    } 

    private void createPdf() { 

     String reportLocation = System.getProperty("gov.ssa.dne.reportdir"); 
     String report = reportLocation + "DNE_Change_Status_" + DneStyles.reportSdf.format(new Date()) + ".pdf"; 

     try { 
      PdfWriter writer = new PdfWriter(report); 
      PdfDocument pdf = new PdfDocument(writer); 
      Document document = new Document(pdf, PageSize.A4.rotate()); 

      // Add title 
      document.add(pdfTitle); 

      table = new Table(new float[] { 8, 8, 8, 35, 12, 12, 3, 20 }); 

      document.add(table); 
      document.close(); 
      LOGGER.log(Level.INFO, "report complete " + report); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

のpom.xml

<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>gov.ssa.dne.nmst</groupId> 
    <artifactId>dne-caprs-reports</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>dne-caprs-reports</name> 
    <url>http://maven.apache.org</url> 

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

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer 
        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <mainClass>gov.ssa.dne.app.RunReport</mainClass> 
       </transformer> 
       <transformer 
        implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> 
        <resource>META-INF/persistence.xml</resource> 
        <file>src/main/java/META-INF/persistence.xml</file> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

    <dependencies> 
    <LONG LIST OF DEPENDENCIES REMOVED> 
    </dependencies> 

</project> 

何行っている ここに?私はSTDOUTの問題に対処した他の回答を読んだが、これらの質問は「java-jar」部分なしで実行ファイルとしてjarを実行しようとする人々に関係していた。私はそれをやっていない。それは私のMavenビルドと関係がありますか?どのように私はそれを実行している?私は何か変わるとは思えません。

+0

Windowsマシンで実行しているようですが、おそらくbashプロンプトを使用していますか?ディレクトリの引数は特有のように見えます。-Dgov.ssa.dne.reportdir = C:\\ temp \\ upcoming_changes(バックスラッシュをエスケープして、先にスペースを削除してください) –

+0

stdoutを持たないことは特有です。メインを単純な「こんにちはの世界」に置き換えた場合、それはちょうど「うまくいくはず」...また、それを陰にするときに問題を減らして、基本的な作業を開始してから拡張するかどうかを確認します。あなたは間違いなく何かを見たはずです。 –

+0

@ lane.maxwell私はWindows上で "git bash"シェルを使用しています。これらは、偉大で簡単な提案です。あなたがた両方に感謝します。明らかに私はこれをあまりにも長い間見てきました!私は第2の提案から始めました。確かに、「Hello world!」を印刷するだけのシンプルなJava jarです。 STDOUTは実際にそれをしました。私はそこから続行して、私が見つけたものを投稿します。 – april26

答えて

0

私のアプリケーションの動作は、私がやっていなかったコマンドライン引数の適切な処理に依存していました。ここで

は(メインの定義です)RunReports.javaから:

public static void main(String[] reports) 

何もアクションを行う前に、我々は、コマンドライン引数と一致する必要があります。

if (reports[0].equals("change_status")) { 
    // do something 
} 

をしかし、私は持っていたので、コマンドラインを間違って設定します。つまり、jarファイルの後のJVM引数では、レポート[0]の一部になりました。私はSTDOUT(上記のコメントを参照)に印刷する方法を考え出すと、何が起こっているのかを知ることができました。私のコマンドライン引数

reports[0] 

を印刷すると、明らかに

upcoming_changes 

ここに神秘的なので、何も一致していません

-Dgov.ssa.dne.reportdir=C:\temp\ upcoming_changes 

をもたらしました。私はいくつかのものを切り替えて、@ lane.maxwellごとにC:\ tempへのパスを微調整する必要があり、すべてがうまくいきました。

最終的なコマンドラインステートメント

java -Dgov.ssa.dne.reportdir="C:\\temp" -jar dne-caprs.jar upcoming_changes 

この問題は日食では発生しませんでした理由は以下の通りです:Javaアプリケーションの実行構成で

、引数のタブがあります。引数タブにはVMセクションがあります。ここにはVM引数があり、プログラム引数セクションにはプログラム引数が入ります。

私は設定を正しくeclipseでセットアップしているので、正しく実行されました。