2016-08-07 10 views
3

別のプロファイルでmavenを実行したいが、動作していないようだ。 は私JPAConfigurationのために2貴様のJavaクラスを作成しました:私のpom.xmlでEclipse Maven:スプリングプロファイルでテストを実行

JPAConfiguration.classとJPAConfigurationTest.class

@Configuration 
@Profile({"dev"}) 
@EnableTransactionManagement(proxyTargetClass = true) 
@EnableJpaRepositories(basePackages = { "com.jle.athleges.model.repository", "com.jle.athleges.security.repository" }) 
@ComponentScan(basePackages = { "com.jle.athleges.model.services", "com.jle.athleges.security.services" }) 
public class JpaConfiguration { 

    @Bean 
    public DataSource dataSource() throws SQLException { 
     System.out.println("use dev"); 
     EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
     builder.setName("dev"); 
     return builder.setType(EmbeddedDatabaseType.H2).build(); 
    } 

    @Bean 
    public EntityManagerFactory entityManagerFactory() throws SQLException { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("com.jle.athleges.model.entity", "com.jle.athleges.security.entity"); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 

    } 

    @Bean 
    public EntityManager entityManager(EntityManagerFactory entityManagerFactory) { 
     return entityManagerFactory.createEntityManager(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() throws SQLException { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory()); 
     return txManager; 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 

} 

@Configuration 
@Profile({"test"}) 
@EnableTransactionManagement(proxyTargetClass = true) 
@EnableJpaRepositories(basePackages = { "com.jle.athleges.model.repository", "com.jle.athleges.security.repository" }) 
@ComponentScan(basePackages = { "com.jle.athleges.model.services", "com.jle.athleges.security.services" }) 
public class JpaConfigurationTest { 

    @Bean 
    public DataSource dataSource() throws SQLException { 
     System.out.println("use test"); 
     EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
     builder.setName("test"); 
     return builder.setType(EmbeddedDatabaseType.H2).build(); 
    } 

    @Bean 
    public EntityManagerFactory entityManagerFactory() throws SQLException { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("com.jle.athleges.model.entity", "com.jle.athleges.security.entity"); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 

    } 

    @Bean 
    public EntityManager entityManager(EntityManagerFactory entityManagerFactory) { 
     return entityManagerFactory.createEntityManager(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() throws SQLException { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory()); 
     return txManager; 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 

} 

、私はこれを持っている:最後に

<project> 

… 

<dependencies> 

… 

</dependencies> 

    <profiles> 
     <profile> 
      <id>dev</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
     </profile> 
     <profile> 
      <id>test</id> 
     </profile> 
    </profiles> 


    <build> 
     <finalName>AthleGes</finalName> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>${maven-compiler-plugin.version}</version> 
        <configuration> 
         <source>1.8</source> 
         <target>1.8</target> 
         <debug>true</debug> 
        </configuration> 
       </plugin> 

      </plugins> 
     </pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>${maven-war-plugin.version}</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>${jetty-maven-plugin.version}</version> 
       <configuration> 
        <jettyEnvXml>src/test/resources/jetty-env.xml</jettyEnvXml> 
        <scanIntervalSeconds>10</scanIntervalSeconds> 
        <stopKey>foo</stopKey> 
        <stopPort>9999</stopPort> 
       </configuration> 
       <executions> 
        <execution> 
         <id>start-jetty</id> 
         <phase>pre-integration-test</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <scanIntervalSeconds>0</scanIntervalSeconds> 
          <daemon>true</daemon> 
         </configuration> 
        </execution> 
        <execution> 
         <id>stop-jetty</id> 
         <phase>post-integration-test</phase> 
         <goals> 
          <goal>stop</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

とし、Iテストクラスを持っている:

@RunWith(SpringJUnit4ClassRunner.class) 
@ActiveProfiles(profiles = {"test","dev"}) 
@ContextConfiguration(classes = { JpaConfigurationTest.class, JpaConfiguration.class, SecurityConfig.class }) 
@TestExecutionListeners({ 
     DependencyInjectionTestExecutionListener.class, 
     DirtiesContextTestExecutionListener.class, 
     TransactionalTestExecutionListener.class, 
     }) 
public class MemberServiceImpTest { 

    static Logger log = LoggerFactory.getLogger(MemberServiceImpTest.class); 

    @Autowired 
    private MemberService memberService; 

    @Autowired 
    private MemberRepository repository; 

    @Before 
    public void setUp(){ 
     repository.deleteAll(); 
    } 

    @Test 
    public void saveMember() { 

     log.debug("Start saveMember"); 
     Member a = new Member(); 
     a.setFirstname("aaa"); 
     a.setLastname("hhh"); 
     a.setId(0L); 

     Assert.assertNotNull(memberService.save(a)); 

     log.debug("End saveMember"); 
    } 

    @Test 
    public void getAllMembers() { 
     log.debug("Start getAllMember"); 

     long sizeBefore = repository.count(); 
     Member a = new Member(); 
     a.setFirstname("aaa"); 
     a.setLastname("hhh"); 
     a.setId(2L); 

     Member b = new Member(); 
     b.setFirstname("aaa"); 
     b.setLastname("hhh"); 
     b.setId(1L); 
     memberService.save(a); 
     memberService.save(b); 

     Assert.assertEquals(memberService.getAll().size(),sizeBefore + 2); 
     log.debug("End getAllMember"); 
    } 
} 

私は私のユニットテストf romのEclipse、それは正常に動作しています。テストクラスのプロファイルをdevからtestに、testからdevを移動すると、動作しています。私はテストパスを意味し、表示されたメッセージ "use dev"または "use test"が表示されます。

私は(M2eを持つ)のmavenからテストを実行したいと私は、このコンフィギュレーションを作成しました:

Eclipse-Maven-Configuration

しかし、私は、プロファイルを変更すると、テストは常に起動されます。

Maven - > Select Maven Profileからプロファイルをアクティブにしようとしましたが、私は同じ結果でした。

私は何かが恋しいですが、私は何を知りません。わかりません。

お手伝いできますか?コンフィギュレーション@ActiveProfiles 1として

おかげ

答えて

6

、両方のプロファイルは、テスト実行時に有効になります。 mavenを通じてテストケースのアクティブなスプリングプロファイルを制御したい場合は、テストクラスから@ActiveProfilesアノテーションを削除し、spring.profiles.activeをシステムプロパティとして指定することをお勧めします。 Mavenの確実なプラグインconfigurtionで

セット、それを::

<project> 
    <properties> 
     <spring.profiles.active>dev</spring.profiles.active> 
    </properties> 

    <profiles> 
     <profile> 
     <id>dev</id> 
     <activation> 
      <property> 
       <name>spring.profiles.active</name> 
       <value>dev</value> 
      </property> 
     </activation> 
     </profile> 
     <profile> 
     <id>test</id> 
     <activation> 
      <property> 
       <name>spring.profiles.active</name> 
       <value>test</value> 
      </property> 
     </activation> 
     </profile> 
    </profiles> 

     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <argLine>-Dspring.profiles.active=${spring.profiles.active}</argLine> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 

</project> 

をあなたはspring.profilesを渡すことで、既に行っているとして、あなたは単にMavenのテストを実行することができますが、次のいずれかの方法を使用してそれを行うことができます。プロファイル名なしのアクティブなパラメータ。プロフィールはspring.profiles.active

OR

プロパティの値を使用して自動的に起動されるように、実行時にMavenのパラメータを使用して確実なプラグインにそれを渡します

MVN -DargLine = " - Dspring.profiles.active = dev "

+0

ご協力いただきありがとうございます。 私は実際に(今のところ)コマンドでmavenを使っていませんが、eclipseを使っています。だから私は直接lvnコマンドを実行しない、私はm2eを使用します。 すべてのソリューションで完全に機能していません。 1)JUnit Testで@ActiveProfileを削除し、Eclipse Run Configuration Environmentでspring.profiles.active(dev)を追加しました。 (それは動作します) 2)設定でプロパティspring.profiles.activeを追加してpom.xmlを更新しました。 3)私はdev、test、surfireプラグインでプロファイルを設定して設定プロパティを削除しましたが、環境でmavenを実行すると、定義されたparamを使用しません。 –

+0

最後に、各maven設定でspring.profiles.activeを定義する必要があります。それは働いているが、本当に私が望むように。どうもありがとうございました。 –

関連する問題