maven-gdzie znajduja sie jary? dlaczego m2e nie dziala podczas gdy 'mvn install' z konsoli-tak

0

Czesc, mam pare prostych (poczatkujacych) pytan apropos mavena. Zainstalowalam sobie wtyczke do eclipse m2e. Utworzylam projekt w typu Dynamic Web Project i ustawilam na nim 'enable dependecy managemnt'. ok, wygenerowal mi sie pom.xml i jedyne co to dodalam do niego spring-web. pom.xml wyglada tak:

<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>bookstore</groupId>
  <artifactId>bookstore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
          <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-web</artifactId>
                  <version>3.0.6.RELEASE</version>
                  <type>jar</type>
                  <scope>compile</scope>
          </dependency>
  </dependencies>
</project> 

Do projektu dodalam jeszcze zwykly plik html w ktorym wypisuje 'Hello World'. Kilknelam maven->update dependecy, cos tam sie mielilo. na koniec build project i export war. ok, odpalilam tomcata oraz moj projekt, a tu zamiast spodziewanego 'Hello World' dostaje info ze nie moze znalezc tego springa. czyli jara mu brakuje. patrze w projekt, web-inf/lib - pusto. Pytanie nr 1:

  1. Dlaczego?

dalej odpalilam recznie mvn install. cos sie tam znow posciagalo, dalej w eclipse zrobilam juz tylko 'export war'. no i tym razem dostalam moje 'Hello World'. Pytanie nr 2:
2. Dlaczego?

tzn dlaczego zadzialalo mi jak recznie uzylam mvn a nie przez eclipse??

I kolejne moje pytanie: web-inf/lib nadal jest pusty. troche tego nie kumam, myslalam ze maven sciaga biblioteki do projektu i umieszcza je tam, gdzie sie spodziewamy (web-inf/lib). Czy to moze jest tak, ze on sobie sciaga to do m2/repository a w naszym projekcie gdzies(gdzie?) zapisuje sciezke do bibliotek?
troche tego nie kumam, jakby komus z Wam zechcialo sie mi to wyjasnic to bylabym wdzieczna.

pzdr,
misty

0

O nie nie - do katalogu web-inf/lib W PROJEKCIE nie ściąga. Tak jak mówisz - trzyma tylko w repozytorium lokalnym. Dopiero podczas budowania pliku "war" kopiuje sobie co mu potrzebne i do "war'a" dorzuca. Jeśli więc chcesz sobie czasem podejrzeć jakie liby dołączyło, a jakich nie - złap sobie i otwórz plik "war" jakimś zip'em czy 7zip'em - i dopiero tutaj sobie rzucaj okiem na zawartość web-inf/lib.

Na pytanie nr 2 odpowiedź jest prosta: bo wszystko dobrze robisz ;) pom masz ok, scope ustawiony na compile - więc ma dołączać. I dołącza jak widać.

Na pytanie nr 1 odpowiedzi jakiś eclipsowiec musi udzielić, siedząc w NetBeansie nie mam pojęcia jak inne IDE z maven'em się integrują. Znając życie - eclipse próbuje być najmądrzejszy i jakieś "incremental build" pewnie robi i sobie nie załapał, że dependency doszły. Duża szansa, że prymitywne clean&build zamiast samego build by pomogło. Jak nie pomaga - no to eclipsowcy do boju... Nie wiem jak w eclipse wygląda log z takiego budowania - może da mu się włączyć opcje, żeby w tym logu wyświetlał też pełne polecenia, których używa zamiast samych komunikatów. I by się porównało jak to on genialnie tego maven'a uruchamia, że jar'ów nie dołącza...

0

czesc, dzieki za odpowiedz!

jesli chodzi o war'a - to przeciez tomcat sobie go pozniej rozpakowuje-mam juz po prostu katalog i tam przegladalam i w web-inf/lib nadal tej biblioteki nie ma. i nie kumam tego:/ Przeciez w pomie mam wyraznie:

  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-web</artifactId>
  		<version>3.0.6.RELEASE</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency> 

a moze on dociagnie dopiero gdy uzyje jakiejs klasy z tej biblioteki? bo ja na razie mam tylko zwykly index.html w projekcie, a w nim 'hello world'..

pzdr,
misty

0

Nie jestem pewnien czy dobrze masz dependency spróbuje

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>3.0.3.RELEASE</version>
		</dependency>

Co do eclipse to masz autobilda ustawionego ?

0

tomii, nasze dependency sa te same, z tym ze ja mam jeszcze scope. nie dziala mi poprzez eclipse, nie kumam czemu. tylko poprzez mvn install.

0

musialam temat odlozyc na pare dobrych dni-z braku czasu, ale teraz chcialabym do niego powrocic. ogolnie probuje sobie zrobic przyklad ze storny http://darekzon.com/2010/04/spring-framework-3-0-tutorial-cz-1-przygotowanie-projektu-witaj-swiecie

To co mam w projekcie to:

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>bookstore</groupId>
  <artifactId>bookstore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-web</artifactId>
  		<version>3.0.6.RELEASE</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>3.0.6.RELEASE</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc</artifactId>
  		<version>3.0.6.RELEASE</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-aspects</artifactId>
  		<version>3.0.6.RELEASE</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.10</version>
  		<type>jar</type>
  		<scope>test</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.mockito</groupId>
  		<artifactId>mockito-core</artifactId>
  		<version>1.9.0-rc1</version>
  		<type>jar</type>
  		<scope>test</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.sitemesh</groupId>
  		<artifactId>sitemesh</artifactId>
  		<version>3.0-alpha-2</version>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  </dependencies>
</project> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>bookstore</display-name>
	<!-- lokalizacja plikow konfiguracyjnych -->
	<context-param>
		<param-name>contextConfiguration</param-name>
		<param-value>/WEB-INF/web-servlet.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- servlet ktory bedzie obslugiwac zapytania -->
	<servlet>
		<servlet-name>web</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<!-- ustalamy ze nasz servlet obslugiwac bedzie tylko zapytania konczace 
		sie rozszerzeniem *.html -->
	<servlet-mapping>
		<servlet-name>web</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<!-- <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> 
			<welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> 
			<welcome-file>default.jsp</welcome-file> -->
	</welcome-file-list>
</web-app> 

web-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
	<context:component-scan base-package="com.bookstore.controller" />
	<context:annotation-config />
	<context:spring-configured />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans> 

IndexControlloer:

 package com.bookstore.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexController {

	@RequestMapping(value = "/index")
	public ModelAndView index() {
		ModelAndView mav = new ModelAndView("index/index");
		return mav;
	}

}

oraz index.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<html>
<head>
<title>Index</title>
</head>
<body>Witaj świecie!
</body>
</html>

zrobilam mvn install bo wtyczka eclipse nadal mi nie dziala i w controllerze nie widzial importow. I teraz moje 2 pytania do Was:

  1. W eclipse jak dalam 'build project' to pojawil mi sie czerwony krzyzyk przy "Java Resources" i nigdzie indziej. - czemu i o co chodzi?
  2. Zrobilam warke, wrzucilam na tomcata, ale aplikacji nie udalo sie odpalic poniewaz:

INFO: Deploying web application archive bookstore.war
Nov 5, 2011 1052 AM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart

Czy ktos z Was wie moze o co chodzi? Masakra, przeciez w tej aplikacji nic nie ma, a konfiguracja i proba odpalenia tego to jakas masakra. czemu to nie dziala??

bede wdzieczna za wszystkie podpowiedzi,

pzdr,
misty

0

znalazlam jakies porady na necie i zrobilam (wg nich) tak: czepial sie o ContextLoadListener, wiec z 'JavaResources'->'Maven Dependecies' znalazlam te klase i postawilam break point w miejscu this.contextLoader.initWebApplicationContext(event.getServletContext()); i "Run As" -> "Run on server" i tutaj na konsoli dostalam juz wiekszy komunikat, mianowicie ze ContextLoadListener - ClassNotFound! jak to mozliwe?? nie mam pojecia! przeciez jest ta klasa i widze ja. zaczelam szukac dalej i ktos opisal ze nalezy: prawym na projekt->Properties->Deployment Assemby->Add->JavaBuildPathEntries->Maven Dependencies. no wiec zrobilam tak, znow odpalilam "Run on server" i tym razem dostalam:
**SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
**

jeny, jaki i po co applicationContext? czy ja musze miec taki plik? czy to musi byc takie ciezkie? :(

0

doczytalam dalej i:

w web.xml dodalam:

	<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/web-servlet.xml</param-value>
</context-param> 

pozniej sie czepial o "java.lang.ClassNotFoundException: org.aspectj.lang.NoAspectBoundException"

wiec dodalam i poszlo. masakra moim zdaniem. 2 kolejne pytania (o ile komus sie w ogole chcialo to wszystko przeczytac ;)):

  1. dlaczego musialam dodac ten wpis do web-xml? przeciez mialam juz wczesniej:
	<context-param>
		<param-name>contextConfiguration</param-name>
		<param-value>/WEB-INF/web-servlet.xml</param-value>
	</context-param> 
  1. o co chodzi z tym aspectj? do czego to?

pzdr,
misty

0

O jejku - nie ma Eclipsowców... Tomcatowców też nie...:(
Tandem, którego ja używam: Netbeans + Glassfish siłą rzeczy różni się właśnie tym, co tu jest problemem: konfiguracją

Pocieszę Cię - tak, to jest masakra. Zawsze jest masakra. Fakt, że jakby to wszystko Ant'em robić - byłaby jeszcze większa.

Wtyczka dalej nic? Boziu... wiesz, aż z ciekawości może sobie tego eclipse zainstaluję - wrzuć ten eksperymentalny projekt jako załącznik, cobym chociaż trochę życie sobie uprościł. I prześledziłbym sobie, co ta wtyczka uruchamia inaczej niż zwykły maven install. Chociaż po cichu powiem, że jak mam powiązanych 7 projektów, w tym 2 to biblioteki, 3 to aplikacje JSF, 1 aplikacja 'po prostu', a jedna to Java SE - to jak ma to być zrebuildowane i zredeployowane, to i tak na Windowsie lecę z surowym maven-em (do buildowania) i asadmin-em (do deployowania), bo Netbeans niby sobie w miarę radzi - ale potrafi tak poblokować pliki po deployu, że potem clean&build to tylko po restarcie Netbeansa i Glassfisha da się zrobić :D Nikt z otoczenia na to rozwiązania nie wymyślił. A parę osób dużo zmyślniejszych ode mnie jest. Więc widzę, że to ogólnie każde połączenie ma swoje kaprysy i jest "umiejętne-inaczej" jak do integracji dochodzi.

To są te... "nowoczesne technologie tworzenia aplikacji korporacyjnych", tfu ;]

**Wieć sumarycznie: **prośba (0) wtyczka - please, podrzuć to projektowe ;) Może się coś wymyśli.

ad 1) gdzieś się zgubiłem. Miałaś w "web.xml", dodałaś do "web.xml" - działa. Znaczy - masz dwa razy w jednym pliku? Czy w dwóch różnych "web.xml"? Czy w dwóch różnych plikach, i nazwa mi uciekła podczas czytania? /WEB-INF to fascynujący katalog, widziałem już katalogi z "web.xml" + "sun-web.xml" + "glassfish-web.xml" - każdy teoretycznie ma na Glassfishu tę samą funkcję, można by było scalić - a w praktyce to kijem tego nie tykam, nawet wolę nie pytać kto i wskutek jakich akrobacji doszedł, że musi to być tak porozrzucane, że razem "jakoś" działa.

Ale nie o tym. Wiesz, w ogóle się zdziwiłem, jak to zobaczyłem, bo aplikacje Springowe widziałem normalnie konfigurowane, i nie było tam ani jednego contextConfiguration, listener'ów, i innych cudów, a już na pewno dosłownego wskazywania innych plików po ścieżce. Tylko prosty, prymitywny układ: serwlet o NORMALNEJ nazwie, a potem plik "NORMALNAnazwa-servlet.xml" - i wszystko się samo odszukiwało.

Znaczy - ja żyję w epoce takich minimalistycznych przykładów

ad 2) AspectJ to takie fajne coś do (jak nazwa wskazuje ;)) programowania "aspektowego". Spłycając: używając tego można wygodnie, zmyślnie i elegancko doklejać własny kod do cudzych klas, (przed metody, po metodach, w środek i w ogóle jeszcze na poprzek i na ukos). Pewnie sobie Springowcy tego używają do implementowania różnych rzeczy wygodniej, bo w projektach nie-springowych akurat o AspectJ nigdy mi nie wołało.

Dowaliło Ci masakrą, bo w zasadzie gość dowalił tutorial, który próbuje w jednym "hello world" 3 frameworki jednocześnie zaprezentować, na cholerę ten Sitemesh i Spring za jednym zamachem... Najpierw JSPową - jak sobie człowiek poradzi, to dowalić Spring, a jak sobie poradzi, to Sitemesh o_O

0
  1. applicationContext.xml to konfiguracja beanów sprignowych.
  2. web-servlet.xml to plik zawierający definicje par kontroler-widok (plik jsp). Obecnie powinno to działać z poziomu adnotacji, ale czasami Spring strzela focha i tyle.
  3. AspectJ jest wykorzystywany przez Springa m.n. do obsługi adnotacji @PostConstruct czy @PreDestroy. Do czego służy > http://koziolekweb.pl/2009/12/30/aspectj-join-point-i-pointcut-teoria/ trochę po łebkach, ale zawsze :D
0

Koziołek... ad 2 takie, yyyy, eeee, uuuuu :|

Bo ja czasem to durny jestem i rzecz oczywista mi czasem umyka. Aż sobie przegrepowałem wszystkie projekty na dysku, nigdy nigdzie nie była ta nazwa jawnie wklepywana do "web.xml" :| A tutaj 2 razy podobno aż musiało być, żeby zaczęło działać o_O Co za magia?

Ba - przecież to w 90% przypadków ma inną nazwę, bo servlet ma inną nazwę, w stylu: "spring", "springmvc" albo whatever... no biorąc pod uwagę, że "web.xml" to nazwa już istniejąca, zarezerwowana dla konfiguracji WARa, w dodatku Glassfish to sobie robi wariacje na temat tej nazwy prefiksując... to IMHO trzeba być masochistą, żeby sobie servlet tak nazywać i potem człowiekowi się pierdzieli w mózgu i co chwilę myli "web.xml" i "web-servlet.xml" i "sun-web.xml" o_O

  • ad 1)** a tu w sumie to też ja się zapytam, bo nie czaję: "a beanów springowych nie używamy, to WTF, po licho on się pluje?" Przecież to w tym momencie ni cholery nie powinno nam wyskoczyć? Czy powinno?

  • ad 3)** a fajno wiedzieć do czego sobie tego używają. Ja jestem prymityw, ASMem niskopoziomo latając sobie taką podobną rzecz robiłem. Fakt, AspectJ przecież niemal całość za człowieka odwala. Chyba sam sobie spróbuje to wcielić w życie, bo jakoś nie wierzę, żeby to "moje" pisane w rękach był wydajniejsze tylko dlatego, że pisane w rękach.

Ja to bym chyba tutorial zmienił, bo po tym przykładzie, to mam dość, mimo tego, że "coś-tam" piszę, a o biednego Springa się ocierać też byłem zmuszony :P

0

@Ranides
ad 1. w starszych wersjach springa cała konfiguracja DI leżała sobie grzecznie w plikach xml.

ad 3. to ja ciebie już nie rozumiem. Po co pisać coś samemu skoro można użyć gotowego rozwiązania?

0

czesc chlopaki, dzieki za odpowiedzi. A uzywaliscie Sitemesh? W tym przykladzie jest uzyty, a ja sie bardzo uparlam by ten przyklad uzyc. Koles kazal tego sitemesha zdefiniowac w web.xml poprzez:

	<filter>
		<filter-name>sitemesh</filter-name>
		<filter-class>com.bookstore.filter.Sitemesh</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>sitemesh</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 

co zrobilam i najelpsze jest ze dostaje ClassNotFoundException! Sprawdzilam to 100 razy, klasa istnieje, a on jej nie widzi. No to przerzucilam klase do default, czyli po prostu do src i filter-class podmienilam na:

<filter-class>com.bookstore.filter.Sitemesh</filter-class>

i znow: ‘java.lang.ClassNotFoundException: Sitemesh”

o co kurna chodzi?!

Swoja droga kaszani mi sie do kwadratu ten eclipse + mvn. Mam utworzony projekt typu 'dynamic web project' z dodanym mavenem i kurna teraz do src nie moge normalnie dodawac paczek! zamiast do src, to dodaja sie do katalogu glownego projektu! i do tego nie sa widoczne tak jak paczka tylko jak folder. i dodajac klase do tej mojej paczki-czyli w sumie folderu to musze mu recznie wpisywac wszystko, do jakiej paczki ma isc. Cos kurna jest nie halo. Czy ja czegos nie powinnac ustawic w properties? Swoja droga zrobilo mi sie tak jak w projekcie zrobilam 'enable mvn dependency'. ale to wkurzajace zaczyna byc!

pzdr,

misty

0

Dlaczego w Twoim pom.xml brakuje typu (domyślnie jest przecież jar)?
Dodaj:
<packaging>war</packaging>

0

robie "export war" w eclipse i mam war'a. Zreszta to nie wplywa przeciez w zaden sposob na to ze mam ten exception..

1 użytkowników online, w tym zalogowanych: 0, gości: 1