2009-11-07 17 views
9

Ho un Java Project, per il quale sto creando un'interfaccia Web, utilizzando uno Dynamic Web Project da Eclipse. Il progetto Web consiste in un singolo servlet e due JSP. Qualcosa di simile a questo:Progetto Web Java che fa riferimento a un altro progetto Java

/JavaApplication 
    /src 
    /lib 
    /resources 
/WebApplication 
    /src 
    /Servlet.java 
    /WebContent 
    /WEB-INF 
    index.jsp 
    other.jsp 

Ora, ho bisogno di fare riferimento JavaApplication da WebApplication, al fine di utilizzare le sue classi per elaborare le richieste web. Qual è il modo migliore per realizzare questo? La mia idea è di creare uno .jar del JavaApplication, contenente tutti i file .class, /resources e /libs. In questo modo, potrei includere il .jar nell'applicazione web e potrei avere un singolo file .war che contiene l'intera applicazione.

Cosa ne pensi? In che modo questo problema viene risolto in genere?

Nota: non voglio convertire il progetto Java in un progetto Web.

+0

ho avuto lo stesso problema. Una risposta in: http://stackoverflow.com/questions/1693322/eclipse-web-project-dependencies risolto. – Bijan

risposta

15

In Eclipse, è possibile dichiarare Riferimenti di progetto per un determinato progetto, l'applicazione Web nel proprio caso. Per fare ciò, fare clic con il tasto destro del mouse sul progetto di applicazione Web, quindi selezionare Proprietà> Riferimenti progetto e selezionare il progetto JavaApplication. Ciò dovrebbe consentire di chiamare il codice dal progetto JavaApplication dallo WebApplication senza dover creare una GUERRA. Questa è una soluzione per lo sviluppo .

Per la distribuzione standard (al di fuori dell'IDE), è necessario creare una GUERRA standard. Per fare ciò, dovrai impacchettare il tuo JavaApplication come JAR includendo i file .class e i file sotto /resources ma non le librerie da cui dipende (JAR sotto /lib). Queste dipendenze finiranno in realtà nella directory WEB-INF/lib di WAR, accanto al JAR del tuo JavaApplication. Questi passaggi sono in genere automatizzati con strumenti come Ant o Maven.

+0

Sì, sto usando quella soluzione per lo sviluppo. Per quanto riguarda la distribuzione, è quello che probabilmente farò, dopo aver ricercato un po 'i file .EAR. Grazie. –

+2

fatto questo lavoro suggerimento, sto provando, ma continuo a ricevere java.lang.NoClassDefFoundError in fase di esecuzione, anche se tutto viene compilato correttamente nei miei servlet. – myahya

+0

La mia domanda come @myahya – janwen

0

In genere si crea un'interfaccia API utilizzando i bean di servizio remoto dall'applicazione Java che espongono i metodi che si desidera richiamare nell'applicazione Web. Includere un proxy dell'interfaccia API con l'applicazione Web che chiama il bean del servizio remoto nell'applicazione Java. Ricorda che dovrai registrare il bean remoto nel file web.xml.

+0

JG desidera utilizzare classi delle sue applicazioni che possono essere un semplice jar execuatble, non sono sicuro che l'utilizzo di bean di servizi remoti potrebbe essere d'aiuto. Credo che la sua soluzione sia corretta. –

+1

Sì, è un po 'esagerato per le mie esigenze attuali. –

2

Considerare lo spostamento fino al livello EAR, se il contenitore Web lo supporta.

La parte difficile con codice condiviso è dove deve essere inserito il codice comune. Un'applicazione web di copia pr? Una copia nel contenitore web? Esagerare con "condividi queste classi" potrebbe finire con problemi con il caricatore di classi.

Se si creano due separato, il codice Java comune del refacter delle applicazioni Web è un progetto Eclipse separato e si fa riferimento ad esso da entrambi i progetti WAR.


EDIT: A quanto pare ho letto male la descrizione del problema, ed ho pensato che ha chiesto circa un nuovo codice di condivisione di applicazioni Web esistente e.

Se si dispone di un progetto Eclipse con l'applicazione e un altro con il frontend Web, è possibile consentire all'applicazione di esportare le risorse necessarie che "Export WAR" in Eclipse Java EE può racchiudere in un file jar e inserire in WEB-INF/lib per te. Devi dirlo esplicitamente con un segno di spunta in Proprietà -> Dipendenze del modulo Java EE per il tuo progetto web. Aspettatevi di sperimentare un po '- mi ci è voluto un po' per imparare.

+0

Grazie, cercherò nella soluzione EAR. Per quanto riguarda il codice condiviso, non ce n'è. L'applicazione web è un semplice front-end per l'applicazione java, che utilizza un 'Engine' per elaborare le richieste e fornire alcuni bean semplici ai JSP. Poiché questa interfaccia è a scopo dimostrativo, deve essere facilmente implementata (attualmente sto usando 'jetty-runner'). Per lo sviluppo, sto usando la soluzione @Pascal descritta, ma sto ancora cercando una soluzione migliore per l'implementazione (attualmente, sto passando tutto ciò di cui ho bisogno [libs, resources, .classes] a 'jetty-runner') . –

16

in Eclipse proprietà del progetto, aggiungere il progetto alle Java EE modulo Dipendenze (Eclipse 3.5 o superiore)

Java EE Module Dependencies

o Assemblea Deployment (Eclipse 3.6 o più recente) l'ingresso nel progetto proprietà.

Deployment Assembly

In questo modo Eclipse si occuperà di fare la cosa giusta per creare una guerra per tutto questo (che si concluderà nel /WEB-INF/lib). Nessun altra configurazione è necessaria, anche se non un po 'di giocherellare in costruire il percorso.

+3

Solo una breve nota: per Eclipse 3.6 e versioni successive, "Dipendenze del modulo Java EE" è stato rinominato in "Deployment Assembly" – jaxvy

+1

Ho cercato ore su questo. Questo ha funzionato perfettamente. Grazie. – nellbryant

+1

È la soluzione migliore, grazie. – Alanmars

2

Collegamento java app per web app per lo sviluppo:

fare clic destro sul progetto web:

immobili> riferimenti del progetto> aggiungere il progetto Java si desidera fare riferimento

Ora, in scheda proprietà del progetto Web vai a

proprietà> implementazione a ssembly> aggiungere il progetto manualmente ed eseguire l'applicazione

Problemi correlati