- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 Maven 项目迁移到 Bazel,但在 Datanucleus 增强方面遇到了麻烦。
后 jar
-file 已构建,Datanucleus 会查看其中的内部并执行一些字节码操作以增强可持久化的类。在 Bazel 中执行此操作的方法是定义一个采用 *.jar
的规则。 java_library
的输出规则并创建库的新增强版本。
我的问题是,对于我的规则,我需要 datanucleus-core
来自外部库的包。当我尝试从 genrule
访问它时来自 $(location //third_party:datanucleus_core)
它指向一个没有类的 jar :
(genrule) cmd = "echo $(location //third_party:datanucleus_core)"
bazel-out/local-fastbuild/bin/third_party/liborg_datanucleus_datanucleus_core.jar
(genrule) cmd = "jar tf $(location //third_party:datanucleus_core)"
META-INF/
META-INF/MANIFEST.MF
jar
-文件由 Bazel 在
genrule
中解析来自
$(location //third_party:datanucleus_core)
仅包含
META-INF/MANIFEST.MF
具有以下内容:
Manifest-Version: 1.0
Created-By: blaze
java_binary
添加正确的规则
datanucleus_core.jar
进入类路径,但 Datanucleus 就地增强了我的库并且无法将其更改写入磁盘(重写规则的输入文件)。还有
java_binary
规则不应该用于构建。
jar
运行 Datanucleus 实用程序的 Bazel 中的库,它作为 Maven 存储库中的第三方依赖项提供?
0.3.2-homebrew
, 操作系统:
OS X El Capitan (10.11.6)
, java:
1.8.0_92
# WORKSPACE
maven_jar(
name = "org_datanucleus_datanucleus_core",
artifact = "org.datanucleus:datanucleus-core:5.0.3",
)
# third_party/BUILD
java_library(
name = "org_datanucleus_datanucleus_core",
visibility = ["//visibility:public"],
exports = ["@org_datanucleus_datanucleus_core//jar"],
)
org_datanucleus_datanucleus_core
缩短为
datanucleus_core
)
最佳答案
正如尼尔斯托克顿所提到的,你不能在 jar 里增强类。因此,基本策略将是:
datanucleus.bzl
文件来声明您的增强规则。它应该类似于:
# Run datastore enhancements on the java_library named "jarname".
def enhance(jarname):
# src is the name of the jar file your java_library rule generates.
src = "lib" + jarname + ".jar"
native.genrule(
name = jarname + "-enhancement",
srcs = [
src,
"//third_party:datanucleus_core"
],
outs = [jarname + "-enhanced.jar"],
cmd = """
# Un-jar the .class files.
jar tf $(location {0})
# Run the enhance.
classes=""
for $$class in $$(find . -name *.class); do
java -cp {0}:$(location //third_party:datanucleus_core) $$class
classes="$$classes $$class"
done
# jar them back up.
jar cf $@ $$classes""".format(src),
)
cmd
可能需要一些修改,但应该是一般的想法。)
java_library(
name = "my-lib",
srcs = glob(["*.java"]),
deps = ["..."],
)
# import the rule you wrote.
load('//:datanucleus.bzl', 'enhance')
enhance("my-lib")
bazel build //:my-lib-enhanced.jar
my-lib-enhanced.jar
作为其他
java_
的依赖项规则。
srcs = [
src,
"@datanucleus_core//jar"
],
java_binary(
name = "datanucleus-core",
main_class = "whatever",
runtime_deps = ["@org_datanucleus_datanucleus_core//jar"],
)
genrule(
name = "your-lib",
srcs = [":datanucleus-core_deploy.jar", ...],
)
:datanucleus-core_deploy.jar
被称为隐式目标:它仅在请求时构建,但它可以从您的
java_binary
生成宣言。
关于使用 Bazel 增强 Datanucleus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40337396/
我的代码符合要求,但是当我尝试运行 DataNucleus 增强器时,我无法完成后编译步骤。我想我丢失了一个 jar 文件,但是是哪个??我已经包含了错误和 pom.xml 我从谷歌页面复制说明:
当为 Google App Engine 运行 Maven 构建时,我收到构建错误: org.apache.maven.plugin.MojoExecutionException: The DataN
我在我的 appengine java 应用程序中使用查询游标,如下所述: https://cloud.google.com/appengine/docs/java/datastore/jdo/que
考虑使用具有以下持久性结构的 DataNucleus 的应用程序: 你有一个类有两个属性,比如 created (Date) 和 lastUpdate (Date):当这个类的对象将被提交时,你如何自
对于上下文,客户端我使用 MVP 模式,因此具有 One 列表的 View 仅知道 ID,并且当我的新 Many 收到时服务器,我希望能够使用“setOneId”或 ID 设置为所需值的空 One 对
我有这些注释: public class Account { @Persistent(defaultFetchGroup = "true", dependent = "false") @Column(
使用 DataNucleus,我很高兴使用抽象基类为子类提供“长”ID(请注意原始类型)。 当调整 example from JPA 时我想到了参数化基类。目的是支持不同的 ID 类型,例如 Stri
我试图用 datanucleus jdo(和 neodatis 作为数据存储)制作一些基本的持久类。 我有以下三个类(从教程中复制) 库存.java @PersistenceCapable publi
DataNucleus 支持缓存协调吗?如果是,我该如何启用和使用它? 我还没有积极使用 DataNucleus,但如果它支持缓存协调,我想考虑它。 背景:多个缓存实例使用缓存协调来相互通知已更改的实
我有两个不同的数据源,我需要两个不同的 PersistenceManagerFactory。这一点我总是可以通过编写一个 persistence.xml 文件来实现。但我希望以编程方式表示它。尽管第二
如何使用 Eclipse maven 项目解决此问题: Plugin execution not covered by lifecycle configuration: org.datanucleus
我正在尝试将 JDBC webapp 移动到 JDO DataNucleus 2.1.1。 假设我有一些看起来像这样的类: 公共(public)类职位{ 私有(private)整数 id; 私有(pr
我正在尝试将 Maven 项目迁移到 Bazel,但在 Datanucleus 增强方面遇到了麻烦。 后 jar -file 已构建,Datanucleus 会查看其中的内部并执行一些字节码操作以增强
使用 JDO 和 DataNucleus 如果我有一个 @PersistenceCapable 类,例如 @PersistenceCapable public class Topic {
如果我没看错的话,它是说NeoDatis 不支持 JDO 获取组。我的解释正确吗? 在 NeoDatis 的 DataNucleus 页面上: The following are known limi
我有一个包含 Map 的类,但是当我尝试保留这个实体时,会抛出空指针异常。我的代码/设置可能有什么问题? 我的类(class): @PersistenceCapable(detachable="tru
我创建了一个转换器插件,如描述的 here对于 X 型。 然后我创建了该类 class A { @Basic(fetch = FetchType.Eager) X x; } 当我尝试保
DataNucleus.JDO - All messages general to JDO DataNucleus.JPA - All messages general to JPA DataNucl
我正在使用带有 JDO(DataNucleus) 的 GAE 1.7.0。当我保留一个具有集合属性的类时,已删除的集合成员不会从数据存储中删除。我从分离的副本中删除集合成员。新成员已正确添加,现有成员
我正在尝试使用 DataNucleus 和 MySQL 创建一个 Maven 项目。但是,当我尝试构建和 mvn datanucleus:schema-create项目,我失败了。我不明白为什么。 这
我是一名优秀的程序员,十分优秀!