2016-12-31 10 views
1

Liberty 16.0.0.3でSpringブートWebアプリケーションをデプロイしています。すべての依存スコープが提供され、グローバル共有ライブラリとして提供されています。 Libertyはアプリケーションコンテキストをロードできませんでした。LibertyプロファイルがSpringブートコンポーネントを検出できない注釈があり、アプリケーションコンテキストがロードされていない

私の設定は以下の通りです。

私のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.myapp.testapp</groupId> 
    <artifactId>testsharedlib</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>testsharedlib</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <runtime.scope>provided</runtime.scope> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <scope>${runtime.scope}</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-ws</artifactId> 
      <scope>${runtime.scope}</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 



    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <!-- <version>2.3</version> --> 
      <executions> 
       <execution> 
        <goals> 
        <goal>repackage</goal> 
        </goals> 
        <configuration> 
        <skip>true</skip> 
        <!-- <failOnMissingWebXml>false</failOnMissingWebXml> --> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
        <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> 
        <archive> 
         <manifest> 
          <mainClass>com.myapp.testapp.Appconfig</mainClass> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
         </manifest> 
         <manifestEntries> 
          <DisableIBMJAXWSEngine>true</DisableIBMJAXWSEngine> 
          <Class-Path>conf</Class-Path> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
     </plugin> 
     </plugins> 
    </build> 


</project> 

リバティのserver.xml

<server description="Default Server"> 

    <featureManager> 
    <feature>webProfile-7.0</feature> 
     <feature>localConnector-1.0</feature> 
    </featureManager> 


    <library id="global"> 
     <fileset dir="${server.config.dir}/lib/jars" includes="*.jar"/> 
    </library> 

    <application context-root="HelloWorld" location="text-1.0.0-SNAPSHOT.war"> 
     <classloader commonLibraryRef="global" delegation="parentFirst"/> 
    </application> 

    <!-- Define the host name for use by the collective. 
     If the host name needs to be changed, the server should be 
     removed from the collective and re-joined. --> 
    <variable name="defaultHostName" value="localhost"/> 

    <keyStore id="defaultKeyStore" password="adminpwd"/> 

    <!-- Define an Administrator and non-Administrator --> 
    <basicRegistry id="basic"> 
     <user name="admin" password="adminpwd"/> 
     <user name="nonadmin" password="nonadminpwd"/> 
    </basicRegistry> 

    <!-- Assign 'admin' to Administrator --> 
    <administrator-role> 
     <user>admin</user> 
    </administrator-role> 

    <webContainer deferServletLoad="false"/> 
    <applicationManager autoExpand="true"/> 

    <httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/> 

    <logging consoleLogLevel="INFO" traceSpecification="*=info:com.ibm.ws.classloading.*=ALL"/> 


</server> 
+0

戦争のプラグインの設定が奇妙に見えます。 'mainClass'は非実行可能な戦争にどのように関連していますか? –

+0

障害に関連する例外/スタックはありますか? – covener

+0

@StephaneNic​​ollアプリケーション・コンテキストのロードを呼び出すためにリバティだけのメイン・クラスを提供しました。私は戦争のプラグインだけで何も提供していないとしてもロードされていません。 – springbootlearner

答えて

0

私はそれがグローバル共有Library.FindとリバティでWEB-INF/web.xmlのを提供することにより、動作させることができることができますサンプル構成の下にあります。

のpom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<groupId>com.myapp.testapp</groupId> 
    <artifactId>testsharedlib</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>testsharedlib</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <runtime.scope>provided</runtime.scope> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <scope>${runtime.scope}</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-ws</artifactId> 
      <scope>${runtime.scope}</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
<build> 
     <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
        <goal>repackage</goal> 
        </goals> 
        <configuration> 
        <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
     </plugin> 
     </plugins> 
    </build> 
</project> 

のserver.xml

<featureManager> 
    <feature>webProfile-7.0</feature> 
     <feature>localConnector-1.0</feature> 
    </featureManager> 


    <library id="global"> 
     <fileset dir="${server.config.dir}/lib/jars" includes="*.jar"/> 
    </library> 

    <application context-root="HelloWorld" location="text-1.0.0-SNAPSHOT.war"> 
     <classloader commonLibraryRef="global" delegation="parentLast"/> 
    </application> 

    <!-- Define the host name for use by the collective. 
     If the host name needs to be changed, the server should be 
     removed from the collective and re-joined. --> 
    <variable name="defaultHostName" value="localhost"/> 

    <keyStore id="defaultKeyStore" password="adminpwd"/> 

    <!-- Define an Administrator and non-Administrator --> 
    <basicRegistry id="basic"> 
     <user name="admin" password="adminpwd"/> 
     <user name="nonadmin" password="nonadminpwd"/> 
    </basicRegistry> 

    <!-- Assign 'admin' to Administrator --> 
    <administrator-role> 
     <user>admin</user> 
    </administrator-role> 

    <webContainer deferServletLoad="false"/> 
    <applicationManager autoExpand="true"/> 

    <httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/> 

    <logging consoleLogLevel="INFO" traceSpecification="*=info:com.ibm.ws.classloading.*=ALL"/> 

</server> 

のweb.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 

<display-name>pctext</display-name> 

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
      <param-name>contextClass</param-name> 
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
     </init-param> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>com.myapp.testpkg.ApplicationConfig</param-value> 
     </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

</web-app> 

@SpringBootApplication(scanBasePackages = { "com.myapp.testpkg"})

パブリッククラスApplicationConfig {

 public static void main(String[] args) { 

      SpringApplication.run(ApplicationConfig.class, args); 
     } 
    } 
+0

この回答から、物事を動かすために変更されたものは明確ではありません。 web.xmlの ' 1'ですか? pom.xmlとserver.xmlは元の質問とまったく同じようです。 –

+0

@AndyGuibertを動作させるにはweb.xmlを追加する必要があり、web.xmlにDispatcherServlet設定を提供する必要があります。@SpringBootApplication(scanbasepackages = {com.testapp.textpakage})のようなアノテーションを使用してServletInitilizerを提供する場合、Libertyはアプリケーションコンテキスト私はWEB-INF/libのすべての依存jarでアプリケーションをパッケージ化すると同じことが働いています。 – springbootlearner

0

これはで動作する理由WEB-INF/libの依存関係であり、グローバル共有ライブラリではないのは、Springアプリケーション(org.springframework.web.servlet.DispatcherServlet)を初期化するサーブレットがt彼はjar依存関係。 LibertyはサーブレットクラスのWebコンテキストルート(つまりWEB-INF/*)のみをスキャンします。サーブレットクラスの共有ライブラリはスキャンされません。

あなたが他の答えで分かったように、共有ライブラリのjarから来るサーブレットをリンクする唯一の方法は、web.xmlで明示的に宣言することです(Libertyはそれを。WEB-INF/*のクラスまたはjarファイルの場合と

このことを確認するために、私は単純なサーブレットを書いた:。

@WebServlet("/LibServlet") 
public class LibServlet extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 
} 

その後、私はservletLib.jarにこのサーブレットをパッケージ化、私は共有ライブラリを使用して自分のアプリケーションには、このlibが提供される場合、私はhttp://localhost:9080/testapp/LibServletでサーブレットにアクセスできませんでしたが、移動したときにservletLib.jarWEB-INF/libに設定すると、サーブレットにアクセスできました。

+0

私は私の上記の設定に別の問題があります。私はConfigurationとConfigurationプロパティでプロパティ/ ymlファイルの値をロードするためにLibertyがこれらの値をロードできなかった場合に使用します.Basically起動時に@Configurationクラスをロードできませんでした。 – springbootlearner

関連する問題