Java EE 服务器独立的方式来定位包含 javax.persistence 类 的 JAR
Java EE server independent way to locate JAR containing javax.persistence classes
我有一个 Java EE 应用程序,您可以在其中定义特定类型的变量。为了验证值表达式对其类型是否有效,我创建了一个包含小 class:
的字符串
public class CompilableExpression {
private <type> expression = <expression>;
}
.. 并尝试使用 JavaCompiler:
编译它
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
Iterable<? extends JavaFileObject> compilationUnits =
Arrays.asList(stringContainingCompilableExpression);
CompilationTask task = compiler.getTask(
null, null, diagnostics, options, null, compilationUnits
);
task.call();
如果您使用类型:String
和表达式:"my string"
,或者类型:Integer
和表达式:10
.
我还想使用 @Entity
注释来验证类型。
当我尝试这样做时出现错误:
Cannot find annotation method name() in type javax.persistence.Table: class file for javax.persistence.Table not found
因此,我需要以某种方式将包含 javax.persistence
classes 的 JAR 添加到 class 路径。有找到这个 JAR 的通用方法吗?我正在使用 GlassFish,并且不想构建仅适用于 GlassFish 的解决方案。
或者是否将它作为普通(未提供)依赖项添加到我的项目中?
更新
我试图至少找到 GlassFish 中的位置(在 ~/glassfish-4.1/glassfish
):
find ./ -name '*ee*.jar'
./lib/javaee.jar
./modules/security-ee.jar
./modules/amx-javaee.jar
./modules/javaee-kernel.jar
./modules/autostart/osgi-javaee-base.jar
./modules/autostart/osgi-ee-resources.jar
./modules/deployment-javaee-full.jar
./modules/deployment-javaee-core.jar
./modules/glassfish-ee-api.jar
./modules/javax.management.j2ee-api.jar
我最好的猜测是使用 ./lib/javaee.jar
,但是当我检查内容时它几乎是空的:
$JAVA_HOME/bin/jar tf ./lib/javaee.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/org.glassfish.main.extras/
META-INF/maven/org.glassfish.main.extras/javaee/
META-INF/maven/org.glassfish.main.extras/javaee/pom.xml
META-INF/maven/org.glassfish.main.extras/javaee/pom.properties
有谁知道在哪里(在 GlassFish 安装中)可以获得包含 javax.persistence
classes 的 JAR?
您要查找的 JAR 在 $GLASSFISH_HOME/glassfish/modules/javax.persistence.jar
中
如果您要部署到 JavaEE 应用服务器,带有 @Entity
注释的 JAR 将已经在您应用程序的运行时类路径中。您不必在代码中加载任何 JAR 文件(如您在评论中所述)。
在开发过程中,您通常会在 IDE 中配置应用服务器,并且该过程应将带有注释的 JAR 包含到编译类路径中。
您可能需要手动将其包含在项目编译类路径/应用程序服务器库类路径中,具体取决于您的 IDE 处理方式。对于 Glassfish,所有 API JAR 都位于您在模块目录中查找的位置。
尽管这将您的项目与在相对于应用程序服务器安装的特定位置查找 JAR 进行编译联系起来,但我发现它仍然是比将 JAR 复制到您的项目中进行编译更好的方法。这确保您针对部署到应用服务器的正确 JAR 进行编译,只要这些是 JavaEE API,您的应用程序就可以很好地部署到任何应用服务器。
您还可以将项目设置为使用 Maven,包括持久化所需的 deps APIs,它会在您的 Maven 缓存中找到编译时 deps。
您还可以查看 Jar Explorer,它可以让您在 JAR、JAR 的文件夹等中搜索 类 等。查找这些内容非常方便。
我有一个 Java EE 应用程序,您可以在其中定义特定类型的变量。为了验证值表达式对其类型是否有效,我创建了一个包含小 class:
的字符串public class CompilableExpression {
private <type> expression = <expression>;
}
.. 并尝试使用 JavaCompiler:
编译它JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
Iterable<? extends JavaFileObject> compilationUnits =
Arrays.asList(stringContainingCompilableExpression);
CompilationTask task = compiler.getTask(
null, null, diagnostics, options, null, compilationUnits
);
task.call();
如果您使用类型:String
和表达式:"my string"
,或者类型:Integer
和表达式:10
.
我还想使用 @Entity
注释来验证类型。
当我尝试这样做时出现错误:
Cannot find annotation method name() in type javax.persistence.Table: class file for javax.persistence.Table not found
因此,我需要以某种方式将包含 javax.persistence
classes 的 JAR 添加到 class 路径。有找到这个 JAR 的通用方法吗?我正在使用 GlassFish,并且不想构建仅适用于 GlassFish 的解决方案。
或者是否将它作为普通(未提供)依赖项添加到我的项目中?
更新
我试图至少找到 GlassFish 中的位置(在 ~/glassfish-4.1/glassfish
):
find ./ -name '*ee*.jar'
./lib/javaee.jar
./modules/security-ee.jar
./modules/amx-javaee.jar
./modules/javaee-kernel.jar
./modules/autostart/osgi-javaee-base.jar
./modules/autostart/osgi-ee-resources.jar
./modules/deployment-javaee-full.jar
./modules/deployment-javaee-core.jar
./modules/glassfish-ee-api.jar
./modules/javax.management.j2ee-api.jar
我最好的猜测是使用 ./lib/javaee.jar
,但是当我检查内容时它几乎是空的:
$JAVA_HOME/bin/jar tf ./lib/javaee.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/org.glassfish.main.extras/
META-INF/maven/org.glassfish.main.extras/javaee/
META-INF/maven/org.glassfish.main.extras/javaee/pom.xml
META-INF/maven/org.glassfish.main.extras/javaee/pom.properties
有谁知道在哪里(在 GlassFish 安装中)可以获得包含 javax.persistence
classes 的 JAR?
您要查找的 JAR 在 $GLASSFISH_HOME/glassfish/modules/javax.persistence.jar
如果您要部署到 JavaEE 应用服务器,带有 @Entity
注释的 JAR 将已经在您应用程序的运行时类路径中。您不必在代码中加载任何 JAR 文件(如您在评论中所述)。
在开发过程中,您通常会在 IDE 中配置应用服务器,并且该过程应将带有注释的 JAR 包含到编译类路径中。
您可能需要手动将其包含在项目编译类路径/应用程序服务器库类路径中,具体取决于您的 IDE 处理方式。对于 Glassfish,所有 API JAR 都位于您在模块目录中查找的位置。
尽管这将您的项目与在相对于应用程序服务器安装的特定位置查找 JAR 进行编译联系起来,但我发现它仍然是比将 JAR 复制到您的项目中进行编译更好的方法。这确保您针对部署到应用服务器的正确 JAR 进行编译,只要这些是 JavaEE API,您的应用程序就可以很好地部署到任何应用服务器。
您还可以将项目设置为使用 Maven,包括持久化所需的 deps APIs,它会在您的 Maven 缓存中找到编译时 deps。
您还可以查看 Jar Explorer,它可以让您在 JAR、JAR 的文件夹等中搜索 类 等。查找这些内容非常方便。