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:

  1. 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/s[...]owanie-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 10:56:52 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> 
  2. 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[...]join-point-i-pointcut-teoria/ trochę po łebkach, ale zawsze :D

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