Hallo zusammen,
wir haben heute einen neuen Server mit Jenkins aufgesetzt und unser Projekt bauen lassen. Das läuft auch ganz wunderbar durch, aber beim Starten der App bekommen wir eine NPE. Angeblich sei der Spring Context null.
Wir haben folgende Klasse um an die Beans zu kommen:
Hier eine "Anforderung" einer Bean:
Klappt lokal wunderbar, da ist nix null beim starten. Auf dem alten Jenkins Server auch nichts null. Nur wenn die App mit dem neuen Server gebaut wird, startet die App nicht.
Hier mal ein paar Unterschiede die mir aufgefallen sind, welche die Server betreffen:
alter Server: java -v 11.0.4
neuer Server: java -v 11.0.15
lokaler Rechner: java -v 11.0.15
Die Java Version kann es schon mal nicht sein, da auf dem lokalen alles paletti ist, wenn ich die .jar lokal baue und auf den Server lege und starte
alter Server: mvn -v 3.6.0
neuer Server: mvn -v 3.6.3
lokaler Rechner: mvn in IDE, kein Plan welche Version
Sollte Maven ein mögliches Problem sein?
Beide Jenkins bauen die App identisch mit clean package -Pproduction (Vaadin)
Die Application.java ist auch nicht irgendwie verändert worden, sodass er die Services nicht findet. Hat also alle nötigen Annotationen:
Weiß grad nicht was ich noch schauen könnte und warum die NPE auftritt sobald es mit dem neuen Jenkins gebaut wird. Es könnte doch nur mit Maven zu tun haben, aber warum?
Auf dem Server wo die App starten soll, ist Java 11.0.15 also auch identisch mit dem neuen, womit Jenkins baut. Der alte Server baut mit einer älteren Version. Mein lokaler Rechner hat aber auch 0.15. Das schließe ich dann auch mal aus.
Dann sind noch ein paar Unterschiede in den node-Versionen welche Vaadin braucht, aber das ist eher Frontend Stuff, das sollte mit dem Java NPE nix zu tun haben. In Jenkins selbst bekommen wir keinen Fehler, nur ein paar Warnungen zu npm aber auch die sind auf dem alten Jenkins identisch zum Neuen.
Jenkins löscht auch den Workspace nach dem bauen, also können auch keine alten Dateien irgendwie drin sein. Bin echt ratlos, hat noch jemand ne Idee in welche Richtung ich suchen könnte?
wir haben heute einen neuen Server mit Jenkins aufgesetzt und unser Projekt bauen lassen. Das läuft auch ganz wunderbar durch, aber beim Starten der App bekommen wir eine NPE. Angeblich sei der Spring Context null.
Wir haben folgende Klasse um an die Beans zu kommen:
Java:
@Component
public class SpringContext implements ApplicationContextAware {
private static ApplicationContext context;
public static <T extends Object> T getBean(Class<T> beanClass) {
return context.getBean(beanClass);
}
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
SpringContext.context = context; //Hier die NPE
}
}
Hier eine "Anforderung" einer Bean:
Code:
@Service
@DisallowConcurrentExecution
public class XXExport implements Job {
ProductService productService = SpringContext.getBean(ProductService.class);
}
Klappt lokal wunderbar, da ist nix null beim starten. Auf dem alten Jenkins Server auch nichts null. Nur wenn die App mit dem neuen Server gebaut wird, startet die App nicht.
Hier mal ein paar Unterschiede die mir aufgefallen sind, welche die Server betreffen:
alter Server: java -v 11.0.4
neuer Server: java -v 11.0.15
lokaler Rechner: java -v 11.0.15
Die Java Version kann es schon mal nicht sein, da auf dem lokalen alles paletti ist, wenn ich die .jar lokal baue und auf den Server lege und starte
alter Server: mvn -v 3.6.0
neuer Server: mvn -v 3.6.3
lokaler Rechner: mvn in IDE, kein Plan welche Version
Sollte Maven ein mögliches Problem sein?
Beide Jenkins bauen die App identisch mit clean package -Pproduction (Vaadin)
Die Application.java ist auch nicht irgendwie verändert worden, sodass er die Services nicht findet. Hat also alle nötigen Annotationen:
Code:
@SpringBootApplication
@EnableScheduling
@EnableRetry
@EnableAsync
@EnableEncryptableProperties
public class Application extends SpringBootServletInitializer implements CommandLineRunner {
//....
}
Weiß grad nicht was ich noch schauen könnte und warum die NPE auftritt sobald es mit dem neuen Jenkins gebaut wird. Es könnte doch nur mit Maven zu tun haben, aber warum?
Auf dem Server wo die App starten soll, ist Java 11.0.15 also auch identisch mit dem neuen, womit Jenkins baut. Der alte Server baut mit einer älteren Version. Mein lokaler Rechner hat aber auch 0.15. Das schließe ich dann auch mal aus.
Dann sind noch ein paar Unterschiede in den node-Versionen welche Vaadin braucht, aber das ist eher Frontend Stuff, das sollte mit dem Java NPE nix zu tun haben. In Jenkins selbst bekommen wir keinen Fehler, nur ein paar Warnungen zu npm aber auch die sind auf dem alten Jenkins identisch zum Neuen.
Jenkins löscht auch den Workspace nach dem bauen, also können auch keine alten Dateien irgendwie drin sein. Bin echt ratlos, hat noch jemand ne Idee in welche Richtung ich suchen könnte?