1
resposta

[jetty-maven-plugin] Arquivos estáticos(frontend)

Olá,

Configurei o plugin do jetty pra rodar meu projeto porém surgiu um problema quanto aos arquivos estáticos do frontend.

Quando executo o mvn jetty:run, minha API sobe normalmente e os arquivos do frontend também ficam disponíveis, mas ao tentar editar algum arquivo qualquer do front(html, css, js) o Windows me mostra um erro dizendo que esses arquivos estão bloqueados para edição por estarem sendo usados por outro programa.

Alguém já teve esse problema? Alguma dica de como eu posso desenvolver meu frontend utilizando os recursos da minha API que fica no mesmo projeto?

Segue imagem de erro ao salvar no Sublime. Outros editores também apresentam mensagens semelhantes.

tag build do pom.xml:

<build>
        <finalName>loja</finalName>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.2.11.v20150529</version>
                <configuration>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                    <httpConnector>
                        <port>8888</port>
                    </httpConnector>
                    <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
                </configuration>

            </plugin>
        </plugins>
    </build>

web.xml:

<servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>br.com.gabrielarsenio.loja.resources</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
1 resposta

Oi Gabriel, tudo bom?

O Windows tem isso de bloquear os arquivos que estão sendo usados por outra aplicação, no caso, pela API. Para resolver isso, o site deles sugere duas soluções: pedir pro Jetty desativar o mapeamento em memória dos arquivos ou pedir pro Jetty copiar a pasta webapp pra uma pasta temporária e usá-la no momento de subir a aplicação.

Um jeito simples de desativar o mapeamento em memória apenas pra esse projeto, como indicado no link, é incluir as seguintes linhas dentro da tag <init-param> do web.xml:

    <param-name>useFileMappedBuffer</param-name>
    <param-value>false</param-value>

Espero ter ajudado. :)