Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Intellij IDEA中未正确解析user.dir_Java_Spring_Maven_Intellij Idea_Spring Boot - Fatal编程技术网

Java 在Intellij IDEA中未正确解析user.dir

Java 在Intellij IDEA中未正确解析user.dir,java,spring,maven,intellij-idea,spring-boot,Java,Spring,Maven,Intellij Idea,Spring Boot,我将@Value注释用于Spring Boot,但它似乎并不像我预期的那样完全工作 在我的@配置文件中: @Value("${installationDirectory}") private File m_installationDirectory; 在我的应用程序.properties中: installationDirectory=${user.dir}/install <!-- Turn on filtering by default for application proper

我将
@Value
注释用于Spring Boot,但它似乎并不像我预期的那样完全工作

在我的
@配置
文件中:

@Value("${installationDirectory}")
private File m_installationDirectory;
在我的
应用程序.properties中

installationDirectory=${user.dir}/install
<!-- Turn on filtering by default for application properties -->
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/application.yml</include>
            <include>**/application.properties</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>**/application.yml</exclude>
            <exclude>**/application.properties</exclude>
        </excludes>
    </resource>
</resources>
启动:

public static void main( String[] args ) throws IOException
{
    logger.info( "Starting application" );
    logger.info( "Java version: {}", System.getProperty( "java.version" ) );
    logger.info( "Java home   : {}", System.getProperty( "java.home" ) );
    logger.info( "Operation System: {} {} ({})", System.getProperty( "os.name" ), System.getProperty( "os.version" ), System.getProperty( "os.arch" ) );
    logger.info( "Working dir : {}", System.getProperty( "user.dir" ) );

    SpringApplication springApplication = new SpringApplication( Main.class );
    springApplication.setShowBanner( false );
    ConfigurableApplicationContext context = springApplication.run( args );
}
启动时的输出:

2014-05-14 09:36:05 INFO [main] Main - Starting application
2014-05-14 09:36:05 INFO [main] Main - Java version: 1.7.0_55
2014-05-14 09:36:05 INFO [main] Main - Java home   : /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre
2014-05-14 09:36:05 INFO [main] Main - Operation System: Mac OS X 10.9.2 (x86_64)
2014-05-14 09:36:05 INFO [main] Main - Working dir : /Users/wdb/Work/netty-test
2014-05-14 09:36:05 INFO [main] Main - Starting Main on bruk-00007-l.zone2.flir.net with PID 98296 (/Users/wdb/Work/netty-test/flux-server/flux-server-application/target/classes started by wdb)
2014-05-14 09:36:05 DEBUG [main] Main - Running with Spring Boot v1.0.1.RELEASE, Spring v4.0.3.RELEASE
2014-05-14 09:36:08 INFO [main] LoggingToFileMessageRepositoryDecorator - Storing messages in /Users/wdb/Library/Caches/IntelliJIdea13/compile-server/install/messages
2014-05-14 09:36:08 INFO [main] OnDiskSingleJvmImageRepository - Storing images in folder /Users/wdb/Library/Caches/IntelliJIdea13/compile-server/install/images
2014-05-14 09:36:08 INFO [main] TrafficDataIntegratorsManagerImpl - Created 3 integrators for 1 sources in 1 ms
2014-05-14 09:36:09 INFO [main] Main - Started Main in 3.928 seconds (JVM running for 4.428)
请注意,如果我只打印系统属性
user.dir
,它将指向
/Users/wdb/Work/netty test
。然而,当
installationDirectory
值被注入到Springbean中时,路径似乎是
/Users/wdb/Library/Caches/IntelliJIdea13/compile server/install/
,而不是预期的
/Users/wdb/Work/netty test/install


请注意,我在运行IntelliJ 13.1.2时,在我的运行配置中将“工作目录”设置为
/Users/wdb/Work/netty test

我发现了问题。我和Maven在一起。默认情况下,
spring boot starter父级
应用程序启用了资源筛选。属性

installationDirectory=${user.dir}/install
<!-- Turn on filtering by default for application properties -->
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/application.yml</include>
            <include>**/application.properties</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>**/application.yml</exclude>
            <exclude>**/application.properties</exclude>
        </excludes>
    </resource>
</resources>
然后将
application.properties
文件更改为:

installationDirectory=\${user.dir}/install

在此之后,一切正常。

启用调试(或跟踪)日志记录,查看
user.dir
是如何解决的。我怀疑服务器启动时,
user.dir
属性被覆盖,并且它指向部署/读取应用程序的目录。调试显示:
在[applicationConfig:[classpath:/application.properties]]中找到了[String]类型的键“installationDirectory”值“/Users/wdb/Library/Caches/IntelliJIdea13/compile server/install”
是的,但是它还应该告诉您一些关于
user.dir
属性的信息。可能在加载
应用程序.properties
.AFAIK时,无法从JVM中设置“user.dir”,因此您的进程不会在您期望的目录中启动。也许使用IDEA的人可以帮助您找到正确的设置(Eclipse的行为完全符合您的预期)。设置
IDEA Run Config
以添加参数-
Duser.dir=specificdirectory
如何?