Интеграция Angular 2 с Spring без web.xml - PullRequest
0 голосов
/ 04 июня 2018

Привет, я пытаюсь интегрировать Angular 2 с Spring.Я хочу избегать ручного способа копирования содержимого папки dist каждый раз внутри веб-приложения во время компиляции.Я пытаюсь сделать это напрямую через pom.

Мой проект pom выглядит так:

 <!-- Plugin to execute command "npm install" and "npm run build" inside 
            /angular directory -->
        <plugin>
            <groupId>com.github.eirslett</groupId>
            <artifactId>frontend-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <workingDirectory>angular</workingDirectory>
                <installDirectory>temp</installDirectory>
            </configuration>
            <executions>
                <!-- It will install nodejs and npm -->
                <execution>
                    <id>install node and npm</id>
                    <goals>
                        <goal>install-node-and-npm</goal>
                    </goals>
                    <configuration>
                        <nodeVersion>v8.9.1</nodeVersion>
                        <npmVersion>5.5.1</npmVersion>
                        <nodeDownloadRoot>https://nodejs.org/dist/</nodeDownloadRoot>
                        <npmDownloadRoot>http://registry.npmjs.org/npm/-/</npmDownloadRoot>
                    </configuration>
                </execution>

                <!-- It will execute command "npm install" inside "/angular" directory -->
                <execution>
                    <id>npm install</id>
                    <goals>
                        <goal>npm</goal>
                    </goals>
                    <configuration>
                        <arguments>install</arguments>
                    </configuration>
                </execution>

                <!-- It will execute command "npm build" inside "/angular" directory 
                    to clean and create "/dist" directory -->
                <execution>
                    <id>npm build</id>
                    <goals>
                        <goal>npm</goal>
                    </goals>
                    <configuration>
                        <arguments>run build</arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- Plugin to copy the content of /angular/dist/ directory to output 
            directory (ie/ /target/transactionManager-1.0/) -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4.2</version>
            <executions>
                <execution>
                    <id>default-copy-resources</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <overwrite>true</overwrite>
                        <!-- <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/</outputDirectory> -->
                        <outputDirectory>${project.basedir}/src/main/webapp</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.basedir}/angular/dist</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Мой Initializer.java выглядит так:

public void onStartup(ServletContext servletContext) throws ServletException {

    System.out.println("IN Initializer : onStartup");
    WebApplicationContext context = getContext();
    servletContext.addListener(new ContextLoaderListener(context));
    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/");

}

 private AnnotationConfigWebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.tour.config");
        return context;
    }

И appConfig выглядит так:

@Bean
public ViewResolver setupViewResolver() {
    UrlBasedViewResolver  resolver = new UrlBasedViewResolver();
    resolver.setPrefix("/");
    resolver.setSuffix(".html");
    resolver.setViewClass(JstlView.class);
    return resolver;
}

 @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index.html");
    }

Но при попадании индекс URL не загружается.PS Я не могу использовать web.xml, поэтому тег welcome-file также нельзя использовать.Любые предложения приветствуются.Заранее спасибо.

Редактировать: Добавлен скриншот структуры кода Структура кода

Редактировать 2: Я решил проблему, расширив WebMvcConfigurerAdapter вместо WebMvcConfigurationSupport.Однако WebMvcConfigurerAdapter устарела.Любые выводы о том, как справиться с этим, будут оценены.Благодаря.

1 Ответ

0 голосов
/ 04 июня 2018

Я храню приложения Angular и Spring в двух отдельных проектах.Для автоматизации развертывания dist dir я использую 4-строчный скрипт npm.

Я показал, как это сделать в этой презентации: https://youtu.be/k8r76d8QzXs?t=2237

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...