2016-06-05 2 views
0

두 개의 Maven 프로파일을 만들려고하고 있는데, 제가 잘못 생각한 것 같습니다. 메이븐 웹 사이트에 읽고 무엇을 제안했다 않았지만, 속성 내의 pom.xml 파일에 아직하지 pom.xml 파일에서 값을 전달 : 내 등록 정보 파일Maven 프로파일 문제

<name>maven-create-profiles</name> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <resource.dir>src/main/resources</resource.dir> 
</properties> 

<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <environment>dev</environment> 
      <db.username>myDevUser</db.username> 
      <db.password>secretDevPasswd</db.password> 
      <db.url>jdbc:mysql://localhost/myDb</db.url> 
      <db.dialect>org.hibernate.dialect.MySQL5Dialect</db.dialect> 
      <db.driver>com.mysql.jdbc.Driver</db.driver> 
     </properties> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
      <property> 
       <name>environment</name> 
       <value>dev</value> 
      </property> 
     </activation> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <environment>prod</environment> 
      <db.username>myProdUser</db.username> 
      <db.password>secretProdPasswd</db.password> 
      <db.url>jdbc:mysql://production-database/myDb</db.url> 
      <db.dialect>org.hibernate.dialect.MySQL5Dialect</db.dialect> 
      <db.driver>com.mysql.jdbc.Driver</db.driver> 
     </properties> 
     <activation> 
      <property> 
       <name>environment</name> 
       <value>prod</value> 
      </property> 
     </activation> 
    </profile> 
</profiles> 

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 
</build> 

:

db.username=${db.username} 
    db.password=${db.password} 
    db.url=${db.url} 
    db.dialect=${db.dialect} 
    db.driver=${db.driver} 

내 자바 클래스를 :

public class MyTest { 

static String userName; 
static String myPassword; 
static String myAccount; 

@BeforeClass 
public void setUp() throws IOException { 

    Properties properties = new Properties(); 
    properties.load(new FileInputStream("src/main/resources/db.properties")); 

    userName = properties.getProperty("db.username"); 
    myPassword = properties.getProperty("db.password"); 
    myAccount = properties.getProperty("db.url"); 
} 

@Test 
public void myTest() { 
    System.out.println(userName); 
    System.out.println(myPassword); 
    System.out.println(myAccount); 
} 

} 내가 갖는 실행 후 결과

:

 ${db.username} 
    ${db.password} 
    ${db.url} 

그러나 저는 실제로 내가 멘 이브 프로필에서 전달하는 것을 얻고 싶습니다. (이것이 프로필을 만드는 주된 이유입니다.) 미리 감사드립니다 !!

+0

이것은 미친입니다. 절대로 POM에 암호를 넣지 마십시오. 그것을 위해'settings.xml'을 사용하십시오. POM을 업로드하면 데이터베이스 비밀을 구울 수 있습니다. –

+0

당신은 내가 나쁜 생각이라고 생각합니다. 저는 많은 사람들이 튜토리얼에서 그것을 보았 기 때문에 그것을했습니다. 내 Pom.xml 파일이 settings.xml을 사용하도록 어떻게 변경되어야하는지 알고 있습니까? 그 구현을 위해 settings.xml이 어떻게 보일 것인가? 감사합니다. –

답변

0

Maven은 리소스가 /target에 복사 될 때 필터링을 적용하지 않고 원본을 수정하지 않습니다. 하지만 src/main/resourcestarget으로 대체해서는 안됩니다. 대신 : 예컨대, 클래스 경로에서 내가 처음이 다음 프로필을 추가, 어떤 프로파일없이 기본값으로 작동 있는지 확인하는 것이 좋습니다

properties.load(MyTest.class.getResourceAsStream("/db.properties")); 

을 최종 자원을 얻어야한다.

+0

감사합니다. 저를 위해 일했습니다. 먼저 나는 표적을 사용했다. 그럼 당신이 대답을 읽고 제안처럼 변경 :'Properties properties = new Properties(); InputStream in = getClass(). getResourceAsStream ("/ db.properties"); properties.load (입력);in.close();'Pom.xml 파일에서 암호를 사용하지 않고 보안상의 이유로 별도의 속성 파일에서 사용하지 않으려 고 (위의 대답에서 제안한 것과 같은) 알아 내려고 시도했습니다. –