我有一个包含REST服务的Java Spring Boot后端应用程序。就在Spring Boot project的主文件夹中,我有一个React应用程序用于前端。我可以运行Spring Boot应用程序并成功访问所有endpoint。我可以运行React应用程序,它也能工作。但现在我想创建一个可执行的jar文件,并将其作为一个应用程序运行,而不是两个应用程序。
我创建了一个可执行的fat jar文件,如下所示:
mvn clean install
它会创建一个jar文件。当我运行它的时候
java -jar target/medaverter-0.0.1-SNAPSHOT.jar
npm start
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>net.tekknow</groupId>
<artifactId>medaverter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>medaverter</name>
<description>Demo project for Spring Security</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20190722</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<workingDirectory>medaverter-front</workingDirectory>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.9.4</nodeVersion>
<npmVersion>5.6.0</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<configuration>
<target>
<copy todir="${project.build.directory}/classes/public">
<fileset dir="${project.basedir}/medaverter-front/build"/>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-antrun-plugin
</artifactId>
<versionRange>
[1.8,)
</versionRange>
<goals>
<goal>run</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
"proxy": {
"/api": {
"target": "http://localhost:8080",
"ws": true
}
},
如果我进入浏览器:http://localhost:8080/api/test/all
我在浏览器中看到:“公共内容”
如果我直接访问后端,我应该这样做,但终端显示:
我终于发现了问题所在。我添加了
.antMatchers("/home/**").permitAll()
.antMatchers("/**").permitAll()
到WebSecurityConfig.java文件中的configure方法。现在看起来是这样的:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/test/**").permitAll()
.antMatchers("/home/**").permitAll()
.antMatchers("/**").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
我对这种方法感到困惑(现在仍然如此)。我认为如果处理了/api/test/all,那就是我所需要的全部。显然不是。我为什么这么想?React流程从app.js开始,该app.js包含
<Route exact path={["/", "/home"]} component={Home} />
home.component.js包含:
componentDidMount() {
UserService.getPublicContent().then(
response => {
this.setState({
content: response.data
});
},
user.service.js包含:
const API_URL = 'http://localhost:8080/api/test/';
class UserService {
getPublicContent() {
return axios.get(API_URL + 'all');
}
@RequestMapping("/api/test")
public class TestController {
@GetMapping("/all")
public String allAccess() {
return "Public Content.";
}
各位工程师,大家好! 我在试图创建一个胖罐子来执行cucumber测试时遇到了一个问题。最初,我按照指南从Baeldung设置测试。当在Maven测试阶段执行时,测试运行良好。当运行带有参数的mvn exec:java命令时,它也能正常工作。 然而,当我创建了一个胖罐子并试图执行测试时,我面临着错误 以下是我的项目的解释,它基本上与Baeldung的测试项目完全一样。 项目结构 直接从可执行jar
我正在尝试并行运行两个exe程序。我想启动它们,等待它们完成后再继续。以下是一个例子: 第一个进程睡眠5秒,第二个进程睡眠10秒。我希望看到进程启动的两条消息和“等待任务”消息。10秒后,请参见“过程完成”。但是,我立即看到“Procs complete”。 任务管理器显示正在运行的进程,同时显示“进程完成”。 那么,我如何从一个程序中启动两个独立的可执行程序,并行运行它们,然后等待它们完成,然后
我在Eclipse中有一个maven项目。在src/main/resources下,我有一个名为“directoryToCopy”的目录,其中包含文件。一旦我运行了我的项目,我想将“directoryToCopy”复制到桌面上的本地目录“localDirec”下。 我用了这个: 这在本地工作正常,但是当我想将其作为可执行jar文件运行时,我会得到NullPointerException。 请问有什
问题内容: 我们在某些工作中动态创建并行步骤。感谢这个线程,我找到了如何动态创建带有并行步骤中使用的参数的地图。 但是,现在我想重用用于创建这些并行步骤的部分代码。为此,我觉得我需要关闭这些内容。 但是,currying似乎无法正常工作。引用闭包内部的循环变量(valueCopy)做正确的事,但是currying并没有达到我的期望。 我做错什么了吗?是否还不支持?有没有解决方法?这可能是詹金斯管道
我们什么时候应该使用Spring boot执行器。如果包括在内,它对应用程序内存和CPU使用有多大影响? 我目前正在使用Spring Boot 2. x。
我想在java中执行一个函数,但同时我想在操作开始和结束时向用户显示一个,问题是如果我不推送第一个的“接受”buyton,我的函数就不会启动,我希望它是自动的,我该怎么做?这是我的代码,我的函数使用JRI接口。