Sorry für die sehr allgemeine Überschrift und die lange Beschreibung zu folgen. Vielen Dank im Voraus für jeden, der dies liest und antwortet.Java App funktioniert nicht auf der Kommandozeile ist in Eclipse in Ordnung
Ich habe eine App, die ein VM-Argument und ein Befehlszeilenargument nimmt. Es ist ein Maven-Projekt. Ich führe es in Eclipse aus einer Java-Anwendung ausführen Konfiguration. Kein Problem. Es erstellt eine PDF-Datei, und System.out() - Aufrufe werden tatsächlich in STDOUT gedruckt. Protokollierungsaufrufe werden an die Eclipse-Konsole gesendet. Alles wie erwartet.
Als ich in Maven bauen (Ich bin mit git Bash-Shell auf Windows 7):
$ mvn clean compile package
Das Gefäß mit allen Abhängigkeiten innerhalb und die persistence.xml-Datei erstellt wird enthalten. Ich laufe von der Befehlszeile
$ java -jar target/dne-caprs-reports-0.0.1-SNAPSHOT.jar \
-Dgov.ssa.dne.reportdir=C:\temp\ upcoming_changes
Keine Fehler. Hurra. Aber ... keine PDF und keine Nachrichten auf STDOUT. Es sollte einige Nachrichten auf STDOUT geben. Ich habe das gesamte Dateisystem nach dem PDF durchsucht, falls sie irgendwo unerwartet ausgegeben wurden. Nichts.
Ich ftped das Glas zu einer Linux-Box und lief es auf die gleiche Weise (mit einem anderen reportdir offensichtlich) und bekam das gleiche Ergebnis. Kein PDF Kein STDOUT. Keine Protokollierung (obwohl ich keine Ahnung habe, ob ich die Protokollierung richtig gemacht habe).
Also "funktioniert nicht" bedeutet, dass die App läuft gut, außer keine Ausgabe auf STDOUT und keine PDF-Datei erstellt wird. UND überhaupt keine Fehler.
Hauptklasse: RunReport.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>
Was
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 Details der Kürze halber entfernt geht hier? Ich habe andere Antworten gelesen, die sich mit dem STDOUT-Problem befassten, aber diese Fragen betrafen Menschen, die versuchten, das jar als ausführbare Datei ohne den "java-jar" -Teil auszuführen. Ich tue das nicht. Hat es mit meinem Maven Build zu tun? Wie ich es betreibe? Ich kann mir nichts anderes vorstellen.
Es sieht so aus, als ob Sie auf einer Windows-Maschine laufen, aber vielleicht mit einer Bash-Eingabeaufforderung? Das Verzeichnis Argument sieht eigenartig aus, haben Sie versucht -Dgov.ssa.dne.reportdir = C: \\ temp \ entering_changes (den Backslash zu entkommen, entfernen Sie das Leerzeichen vor der bevorstehenden) –
Haben keine stdout ist eigenartig. Wenn du das Hauptgerät durch eine einfache "Hallo Welt" ersetzt, sollte es einfach "funktionieren" ... Auch wenn du es schattierst .. Reduziere dein Problem, um zu sehen, ob du etwas Grundlegendes erhalten kannst, bevor du es erweiterst. Du hättest definitiv etwas sehen sollen. –
@ lane.maxwell Ich verwende eine "git bash" Shell auf Windows. Das sind großartige und einfache Vorschläge. Danke euch beiden. Klar habe ich das zu lange her gesehen! Ich habe mit dem 2. Vorschlag angefangen. Sicher genug ein einfaches Java-Glas, das nicht mehr als "Hallo Welt!" Genau das tat STDOUT. Ich werde von dort weitermachen und alles, was ich finde, veröffentlichen. – april26