2016-07-13 12 views
0

Wir haben ein verschachteltes Multi-Modul-Projekt. Unsere Entwickler sind eine Mischung aus IntelliJ IDEA und Eclipse-Anwendern.Jetty Ressourcenbasis unterschiedlich in Maven Nested Multi-Modul Projekt von IntelliJ IDEA vs Eclipse

Wenn Sie einen Anlegestegserver innerhalb eines inneren Moduls betreiben, müssen wir die Ressourcenbasis abhängig von der von uns verwendeten IDE auf unterschiedliche Werte setzen.

Für IntelliJ:

root.setResourceBase("myModule/src/main/webapp");

für Eclipse:

root.setResourceBase("src/main/webapp");

Wir wollen nicht haben, um unsere IDEs zu zwicken, damit es funktioniert, z.B. Ich möchte einige Einstellungen in IntelliJ nicht ändern müssen, damit es mit der Eclipse-Version des Codes funktioniert.

Irgendwelche Ideen?

Antwort

1

Die kurze Antwort:

Ihre Ausführung Unterschiede zwischen Eclipse-vs Intellij kann durch unterschiedliche PWD oder $ {} user.dir erklärt werden, oder das Verzeichnis Setups arbeiten.

Die bessere Antwort:

Sie Dateisystem Pfade dann nicht verwenden.

über eine Classloader.getResource() eine bekannte Ressource in dieser Position nachschlagen und dann das übergeordnete Verzeichnis in das root.setResourceBase()

Beispiel passieren:

Server server = new Server(8080); 

    // Figure out what path to serve content from 
    ClassLoader cl = WebAppContextFromClasspath.class.getClassLoader(); 
    // We look for a file, as ClassLoader.getResource() is not 
    // designed to look for directories (we resolve the directory later) 
    URL f = cl.getResource("hello.html"); 
    if (f == null) 
    { 
     throw new RuntimeException("Unable to find resource directory"); 
    } 

    // Resolve file to directory 
    URI webRootUri = f.toURI().resolve("./").normalize(); 
    System.err.println("WebRoot is " + webRootUri); 

    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar(webRootUri.toASCIIString()); 
    webapp.setParentLoaderPriority(true); 

    server.setHandler(webapp); 

    server.start(); 
    server.join(); 

Sie können sehen, in den embedded-jetty-cookbook Beispiele:

Die andere bessere Antwort:

Ein weiterer Ansatz ist es, die src/main/webapp ein paar verschiedene Möglichkeiten zu finden, je nachdem, wie es gerade läuft

die Betriebsmodi in den ServerMain.java in den embedded-jetty-live-war See Beispiel.