【发布时间】:2021-10-30 00:23:22
【问题描述】:
我正在构建一个具有 2 种不同情况的演示应用程序,第一种是开发,第二种是生产。 这是我的 pom.xml
... (version, name, etc)
<properties>
<java.version>11</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--DEFAULT PROFILE-->
<env>development</env>
</properties>
<dependencies>
... (lombok, junit, swagger, datarest, datatest, web, webmvc...)
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<filters>
<filter>src/main/resources/${env}.yml</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>*.yml</include>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<start-class>com.central.CentralApplication</start-class>
<env>development</env>
</properties>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>production</id>
<activation>
<property>
<name>production</name>
</property>
</activation>
<properties>
<env>production</env>
<start-class>com.central.CentralApplicationProd</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
<version>3.0.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
pom 中似乎没有问题,但是当我尝试创建生产所需的 main 时,它找不到 Eureka 和 Feign 依赖项(@EnableEurekaClient 和 @EnableFeignClients)。另一方面,如果我更改 <activeByDefault>true</activeByDefault> 并将其放入生产配置文件中,它会加载其依赖项,但显然不会加载开发项。
编码时如何加载这两个依赖项? 我的方法错了吗?
提前致谢!
【问题讨论】:
-
如果你做
mvn -Pdesarrollo,production编译会发生什么 -
您不应该为不同的环境创建不同的工件。您应该创建 1 个工件。您有一个 Spring Boot 应用程序,只需在运行时提供必要的信息。
-
Antoniossss,如果我运行该命令(我忘记将配置文件 id 更改为开发,所以我运行的命令是 mvn -Pdevelopment,production)它说留下了一个参数。我做错了什么?
-
Deinum 先生/女士,很抱歉,但我认为我不了解您(我是 Spring 的新手)。工件是什么意思?
-
Artefacts 表示 maven 构建的输出。在您的情况下,人工制品是包含应用程序的 jar 文件。 @M.Deinum 正确建议的是为所有环境生成单个二进制工件(== 相同的 jar 文件)并通过配置参数更改其行为。
标签: java spring spring-boot maven spring-mvc