Обучение и трудоустройство Java-программистов от Junior до Senior

Помогите разобраться с Maven+IntelliJ Idea+Tomcat 7

 
 
 
Сообщения:7
Добрый день, уважаемые разработчики. Помогите, пожалуйста, разобраться с Maven+IntelliJ Idea+Tomcat (7 или 8). Перечитал кучу литературы, пробую делать, есть вопросы.
Пишу web-приложение на основе HttpServlet без Spring.
Настроил IDE (IntelliJ Idea)+maven так, что оно собирает war, деплоит его и запускает Tomcat 7. Всё работает, запускается, но хотелось бы разобрать внутренности.
1. Куда деплоится war?
настройки в settings.xml, tomcat-users.xml не производились
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>MyFirstWebProject</groupId>
    <artifactId>MyFirstWebProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>



    <dependencies>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1206-jdbc42</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.0.1.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
</project>

в настройках конфигурации сначала делается mvn clean install, затем Build Project Artifact
какую ещё информацию предоставить?

2. Вообще, правильно ли так деплоить?
3. Как заставить приложение выполнять некий код тольок при старте ?

Заранее спасибо за помощь.
Изменен:04 сен 2017 11:20
 
 
Сообщения:7
Ещё немного поясню на всякий случай. В projectpath\target компилируется и архивируется - это я знаю. В репозиторий мавен файлы попадают тоже. А вот откуда их берёт Tomcat - не могу понять. Стартовая страница приложения доступно по пути: http://localhost:8080/, при этом вот содержимое папки ..\apache-tomcat-7.0.78\webapps
17.05.2017 22:51 <DIR> docs
17.05.2017 22:51 <DIR> examples
17.05.2017 22:51 <DIR> host-manager
17.05.2017 22:51 <DIR> manager
25.07.2017 20:24 <DIR> secure
ROOT я сам удалил в процессе поиска ответа и он не пересоздаётся при деплое.

По поводу второго вопроса: много читал, что надо создавать пользователя, прописывать его в настройках maven, применять плагин tomcat для деплоя, но у меня и без этого всё работет. Насколько это правильно?

Извиняюсь за 2 поста подряд - не удобно при хилом интернете красиво излагать мысли.
 
 
Сообщения:220
YouKnowNothingJonSnow:
1. Куда деплоится war?

смотри логи (первые строки), зависит от настроек.. может деплоить туда, где окружение идеи ({путь}\.IntelliJIdea\system) или в userprofile\куда-нибудь

YouKnowNothingJonSnow:
2. Вообще, правильно ли так деплоить?

правильно для чего ?
если запустить и посмотреть работоспособность, то да правильно, если нужно деплоить на отдельно работающий сервер, то нужно добавить плагин
<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <url>http://localhost:8080/manager/text</url> <!-- localhost:8080 - тут реальный хост:порт -->
          <server>tomcat7</server> 
          <update>true</update> 
          <path>/${project.build.finalName}</path> <!-- тут имя твоего приложения д.б. -->
        </configuration>
      </plugin>

и настройки в tomcat-users.xml что-то вроде (тут избыточно)
<role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <user password="root" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script,admin" username="root"/>

указанные выше password, username также прописать в settings.xml maven'а
<servers>
    <server>
      <id>Tomcat7</id>
      <username>root</username>
      <password>root</password>
    </server>
</servers>

ну и деплоить командой mvn tomcat7:deploy при работающем сервере

YouKnowNothingJonSnow:
3. Как заставить приложение выполнять некий код тольок при старте ?

а как оно сейчас работает ?!
Изменен:04 сен 2017 18:51
 
 
Сообщения:7
keekkenen:
YouKnowNothingJonSnow:
1. Куда деплоится war?

смотри логи (первые строки), зависит от настроек.. может деплоить туда, где окружение идеи ({путь}\.IntelliJIdea\system) или в userprofile\куда-нибудь

разобрался, спасибо.
keekkenen:
YouKnowNothingJonSnow:
2. Вообще, правильно ли так деплоить?

правильно для чего ?
если запустить и посмотреть работоспособность, то да правильно, если нужно деплоить на отдельно работающий сервер, то нужно добавить плагин

пробовал с этими настройками - не получилось, отложил до лучших времён =)
keekkenen:
YouKnowNothingJonSnow:
3. Как заставить приложение выполнять некий код тольок при старте ?

а как оно сейчас работает ?!

Сейчас оно деплоится и выполняются только сервлеты при обращении к ним через path. Как уговорить tomcat выполнить команды при старте? В обычном приложении java всегда есть private void static main, но с war+tomcat, я так понял, по-другому.
 
 
Сообщения:7
YouKnowNothingJonSnow:
Как уговорить tomcat выполнить команды при старте?

случайно встретил такую вещь: ServletContextListener.contextInitialized - то, что нужно
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет