使用spring boot和spring-boot-maven-plugin生成war时排除application.properties

时间:2014-11-04 20:07:07

标签: java eclipse spring maven spring-boot

我正在使用Spring Boot开发一个Web应用程序,并希望生成war而不是jar。

使用从jar转换为war的转换非常正常:http://spring.io/guides/gs/convert-jar-to-war/

但我想从战争中排除application.properties,因为我使用@PropertySource(value = "file:${OPENSHIFT_DATA_DIR}/application.properties")来获取生产环境中的文件路径。

  • 此方法在生成我的战争时有效,但在eclipse中我无法运行我的应用程序,因为application.properties根本没有复制到目标/类:

    <build>
        <resources> 
            <resource> 
                <directory>src/main/resources</directory> 
                <excludes> 
                    <exclude>application.properties</exclude> 
                </excludes> 
            </resource> 
         </resources> 
    </build>
    
  • 这个方法根本不起作用,我认为spring-boot-maven-plugin不支持packagingExcludes:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration> 
                    <packagingExcludes>WEB-INF/classes/application.properties</packagingExcludes> 
                </configuration> 
            </plugin>
        </plugins>
    </build>
    

你有其他建议吗?

由于

6 个答案:

答案 0 :(得分:6)

尝试使用以下解决方案。这将有效:

<build>
    <resources>
         <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.properties</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果您使用上述解决方案,则在Eclipse IDE中运行项目时可能会收到找不到属性文件的错误。要摆脱这种情况,您需要在运行配置中添加资源文件夹。(运行配置... - &gt;类路径 - &gt;用户条目 - &gt;高级... - &gt;添加文件夹)

答案 1 :(得分:2)

我添加的解决方案是解压缩我的打包战争,删除文件application.properties并使用maven-antrun-plugin创建一个名为ROOT.war的新战争并运行一些ant任务。

这是我在pom.xml中添加到插件中的内容:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
    <execution>
        <id>package</id>
        <phase>package</phase>
        <configuration>
            <target>
                <unzip src="target/${artifactId}-${version}.${packaging}" dest="target/ROOT/" />
                <delete file="target/ROOT/WEB-INF/classes/application.properties"/>
                <zip destfile="target/ROOT.war" basedir="target/ROOT" encoding="UTF-8"/>
                <delete dir="target/ROOT"/>
            </target>
        </configuration>
        <goals>
            <goal>run</goal>
        </goals>
    </execution>
</executions>
</plugin>

我将目标战争命名为ROOT.war因为我在openshift PaaS上使用tomcat,所以我只需复制我的ROOT.war并推送到我的openshift repo。那是

答案 2 :(得分:2)

我从您的问题中了解到,您希望将application.properties用于开发。但你不想用它来制作。

我建议使用 Spring个人资料来实现这一目标。 在您的属性文件中

  1. 为开发创建配置文件。将所有开发属性放在其下。
  2. 请勿在属性文件中为生产创建配置文件。
  3. 开发时,将活动配置文件设置为开发,以便从 application.properties 文件加载属性。
  4. 在生产中运行时,将活动配置文件设置为生产。虽然application.properties将被加载到WAR中,因为没有用于生产的配置文件,所以不会加载任何属性。
  5. 我使用YML做了类似的事情。我确信必须有一种方法可以使用.properties文件执行相同的操作。

    spring:
      profiles.active: development
    --
    spring:
      profiles: development
    something:
      location: USA
      unit1: Test1
      unit2: Test2
    

    您可以使用

    在运行时更改配置文件
    -Dspring.profiles.active=production
    

答案 3 :(得分:1)

在Eclipse中运行时,在运行配置中,您需要指定Spring Boot的属性路径:

--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/

答案 4 :(得分:0)

尝试使用此解决方案:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring.version}</version>
    <configuration>
        <addResources>false</addResources>
    </configuration>
</plugin>

&lt; addResources&gt; false&lt; / addResources&gt; 会在运行mvn spring-boot时保留属性:run

答案 5 :(得分:0)

即使使用application.properites

生成jar包,它仍保留资源<addResources>false</addResources>