加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-ee – 处理Java EE和java.endorsed.dirs的最佳实践?

发布时间:2020-12-15 03:09:22 所属栏目:Java 来源:网络整理
导读:我最近遇到了glassfish standalone(v3.1)vs glassfish embedded(v3.1)vs java SE以及 java.endorsed.dirs的使用方式的问题.我遇到的具体问题是 here,但我认为这不是我最后一次遇到类似问题. 我在here和here找到的信息建议在编译时将glassfish认可的lib添加到
我最近遇到了glassfish standalone(v3.1)vs glassfish embedded(v3.1)vs java SE以及 java.endorsed.dirs的使用方式的问题.我遇到的具体问题是 here,但我认为这不是我最后一次遇到类似问题.

我在here和here找到的信息建议在编译时将glassfish认可的lib添加到bootstrap类路径中.但是,this错误报告表明在使用glassfish嵌入时很难正确设置已认可的库.

因此,似乎当我部署到一个独立的glassfish容器时,我的应用程序将针对glassfish包含的认可库运行,但是当使用嵌入式容器时它不会.我遇到了我原来的问题,因为maven-embedded-glassfish-plugin没有启动使用像glassfish独立的认可库这样嵌入的glassfish.我也不确定其他容器(例如:jboss)是否包含与glassfish相同的一组认可库.

所以,我(1)应该努力(很多)确保我的应用程序是针对认可的lib编译的,并且总是部署到使用被认可的libs引导的容器中,或者我应该(2)只是坚持使用捆绑的东西使用Java SE 6?

如果我选择(2),在将应用程序部署到使用较新的认可库进行自举的容器时,是否需要担心不兼容问题?

我很感激任何人都可以提供的任何见解.

解决方法

我可能会遗漏一些明显的东西,但是……不是GlassFish Embbeded附带了与Java EE规范兼容的库吗?并不是默认加载的那些库? (如果不是,请填写错误: http://java.net/jira/browse/EMBEDDED_GLASSFISH).

我的意思是:您应该针对Java EE规范API进行编译,并让容器使用它自己的实现.

对于第一部分,如果你使用Maven,我喜欢Codehaus archetypes设置被认可的库的方式.它既干净又应用服务器不可知:

<properties>
   <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <compilerArguments>
            <endorseddirs>${endorsed.dir}</endorseddirs>
        </compilerArguments>
    </configuration>
 </plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
    <executions>
       <execution>
            <phase>validate</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <outputDirectory>${endorsed.dir}</outputDirectory>
                <silent>true</silent>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax</groupId>
                        <artifactId>javaee-endorsed-api</artifactId>
                        <version>6.0</version>
                        <type>jar</type>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

这几乎是您针对Java EE 6 API编译项目所需的全部内容.任何符合Java EE 6的App Server都应该提供这些服务,您不应该担心它们如何使它可供您的应用程序使用.

引导Java EE服务的责任应该是您的App Server.如果你尝试自己的“内部”解决方案,JAR Hell可能会破裂.

干杯,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读