非常に一般的な見出しと長い説明に従っていただければ幸いです。これと答えを読んだ人には、事前に感謝します。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ビルドと関係がありますか?どのように私はそれを実行している?私は何か変わるとは思えません。
Windowsマシンで実行しているようですが、おそらくbashプロンプトを使用していますか?ディレクトリの引数は特有のように見えます。-Dgov.ssa.dne.reportdir = C:\\ temp \\ upcoming_changes(バックスラッシュをエスケープして、先にスペースを削除してください) –
stdoutを持たないことは特有です。メインを単純な「こんにちはの世界」に置き換えた場合、それはちょうど「うまくいくはず」...また、それを陰にするときに問題を減らして、基本的な作業を開始してから拡張するかどうかを確認します。あなたは間違いなく何かを見たはずです。 –
@ lane.maxwell私はWindows上で "git bash"シェルを使用しています。これらは、偉大で簡単な提案です。あなたがた両方に感謝します。明らかに私はこれをあまりにも長い間見てきました!私は第2の提案から始めました。確かに、「Hello world!」を印刷するだけのシンプルなJava jarです。 STDOUTは実際にそれをしました。私はそこから続行して、私が見つけたものを投稿します。 – april26