小编Yan*_*eve的帖子

如何列出特定类加载器中加载的所有类

出于调试原因和好奇心,我希望列出加载到特定类加载器的所有类.

看到类加载器的大多数方法都受到保护,实现我想要的最佳方法是什么?

谢谢!

java hierarchy classloader

40
推荐指数
2
解决办法
5万
查看次数

创建maven"target"目录的zip存档

我希望创建一个我的"目标"目录的zip存档($ {project.build.directory).使用maven-assembly-plugin似乎对我来说这样一个简单的任务有点过分(有点复杂 - 为什么我必须使用另一个文件,汇编描述符,用于这样的任务)我找不到看似更简单的maven- http://repo1.maven.org/maven2存储库中的zip-plugin.

有什么输入?

zip plugins maven-2

33
推荐指数
2
解决办法
7万
查看次数

Spring原型bean与单例bean和依赖注入相结合.有一种方法只是配置吗?

我有一个单例bean,它需要每次调用一个函数来返回对不同(新)原型bean的引用.我能想到的唯一方法是通过调用其getBean()方法以编程方式从BeanFactory/ApplicatioContext中检索新的原型bean实例.代码示例将遵循......

有一个更好的方法吗?只有通过配置,希望?(我个人怀疑有...)

<bean id="protoBean" scope="prototype"
        class="com.blahblah.ProtoBean" />

<bean id="singletonBean"
        class="com.blahblah.SingletonBean" />

public class ProtoBean {

    ....
}

public class SingletonBean {

    private BeanFactory factory;

    public ProtoBean dispense() {
        return (ProtoBean) factory.getBean("protoBean");
    }

    ....
}
Run Code Online (Sandbox Code Playgroud)

java spring

22
推荐指数
2
解决办法
3万
查看次数

如何在运行时编译和部署java类?

我正在编写一个规则引擎,它执行由条件结构确定的简单赋值.规则是XML格式的项目的先决条件.我已经将我的XML模式建模为类似于简单的代码块.我希望解析XML,然后将其转换为Java代码.然后,我希望在运行时编译(并运行)此代码.这样做意味着我的规则引擎不再充当解释器,而是执行本机Java字节代码.

我已经找到了解析阶段和或多或少的Java代码生成阶段.我现在想弄清楚最后阶段 - 运行阶段的编译.

遵循这个线程:编译为java字节码(不使用Java)我已经意识到以下可能的解决方案:

我希望能比较这些以及在运行阶段解决Java编译的其他建议.

java runtime compilation

19
推荐指数
2
解决办法
3万
查看次数

如何在单个阶段中执行多个maven插件并设置各自的执行顺序?

我想将maven生命周期中的某些阶段分解为子阶段.我想控制从一个子阶段到另一个子阶段的执行流程,有点像与ant依赖关系.

例如,我想使用NSIS插件,以便在我的项目被打包到war文件之后,将我的项目打包到包阶段的安装程序中.我想在包装阶段做所有这些.

那可能吗?

谢谢

plugins maven-2 flow-control phase

17
推荐指数
2
解决办法
1万
查看次数

如何在maven中使用或滥用工件分类器?

我们目前正在尝试移植一个非常(非常)大型项目,该项目使用ant构建到maven(同时也转移到svn).正在探索重塑项目结构的所有可能性,以最好地适应maven范式.

现在更具体一点,我遇到了分类器,并希望知道如何利用它们对我有利,同时避免使用"分类器反模式".

谢谢

来自:http://maven.apache.org/pom.html

分类器:您可能偶尔会在坐标上找到第五个元素,即分类器.稍后我们将访问分类器,但是现在只需知道这些类型的项目显示为groupId:artifactId:packaging:classifier:version.

分类器允许区分从相同POM构建但其内容不同的工件.它是一些可选的任意字符串 - 如果存在 - 将附加到版本号之后的工件名称.作为此元素的动机,请考虑一个项目,该项目提供针对JRE 1.5的工件,但同时也是一个仍支持JRE 1.4的工件.第一个工件可以配备分类器jdk15,第二个工件配备jdk14,以便客户端可以选择使用哪个.

分类器的另一个常见用例是需要将辅助工件附加到项目的主工件.如果浏览Maven中央存储库,您会注意到分类器源和javadoc用于部署项目源代码和API文档以及打包的类文件.

maven-2 classification project-structure pom.xml maven-3

15
推荐指数
2
解决办法
2万
查看次数

Java类加载器教程

请提供有关Java类加载的详细,全面的教程,重点介绍如何扩展该机制以及如何实际使用扩展.

java classloader

14
推荐指数
2
解决办法
2万
查看次数

XercesImpl与JavaSE 6的内部xerces实现相冲突.两者都需要......可以做些什么?

我确信我不是第一个遇到这种冲突的人.

我继承的代码执行以下操作:

org.w3c.dom.Document dom; // declaration
javax.xml.validation.Schema schema; // declaration

...
...
...

javax.xml.validation.Validator validator = schema.newValidator();
validator.validate(new DOMSource(dom));
Run Code Online (Sandbox Code Playgroud)

其中...代表看似不重要/无关代码

使用JDK 6编译和运行代码可以工作(并且始终有......)

最近,我不得不将我公司其他地方编写的另一个组件集成到我的代码中.该组件绝对需要包含在类路径中xercesImpl-2.8.1.jar

我绝对需要这个第三方组件,现在运行上面的代码不再有效,我得到以下内容:

org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Root'.
 at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
 at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
 at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
 at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
 at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
 at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
 at javax.xml.validation.Validator.validate(Validator.java:127)
Run Code Online (Sandbox Code Playgroud)

作为一个解决方案,我想也许以某种方式在自己的类加载器中屏蔽xercesImpl-2.8.1.jar,但是没有设法这样做,可能是因为缺乏类加载器知识或者可能是因为它不是要走的路.关于我的环境的另一件事,我的应用程序运行在tomcat 5.5和6 ...

顺便说一下调试时我注意到我跑的时候 dom.getImplementation()

  • xercesImpl-2.8.1.jar …

java xml validation jdk1.6 xerces

11
推荐指数
2
解决办法
2万
查看次数

在解组对象时,JAXB不会调用setter

我正在使用JAXB 2.0 JDK 6来将XML实例解组为POJO.

为了添加一些自定义验证,我已经将一个验证调用插入到属性的setter中,尽管它是私有的,但似乎unmarshaller不会调用setter但直接修改私有字段.

对我来说,每个unmarshall调用都会针对此特定字段进行自定义验证,这一点至关重要.

我该怎么办?

码:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "LegalParams", propOrder = {
    "value"
})
public class LegalParams {

    private static final Logger LOG = Logger.getLogger(LegalParams.class);

    @XmlTransient
    private LegalParamsValidator legalParamValidator;

    public LegalParams() {

        try {
            WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
            LegalParamsFactory legalParamsFactory = (LegalParamsFactory) webApplicationContext.getBean("legalParamsFactory");
            HttpSession httpSession = SessionHolder.getInstance().get();
            legalParamValidator = legalParamsFactory.newLegalParamsValidator(httpSession);
        }
        catch (LegalParamsException lpe) {
            LOG.warn("Validator related error occurred while attempting to construct a new instance of LegalParams");
            throw new IllegalStateException("LegalParams creation failure", lpe);
        }
        catch (Exception …
Run Code Online (Sandbox Code Playgroud)

java setter jaxb customvalidator

9
推荐指数
1
解决办法
9186
查看次数

java类加载器和运行时编译

尽管警告会放弃我目前的行动方案,但我目前看不到更好的方法来解决我的问题.我必须 在运行时生成 Java代码,然后编译它,加载它并引用它.

问题是生成的代码导入已经由系统类加载器加载的代码(我想) - 也就是代码存在于我的类路径中的一个jar中.(我在Java 6上运行Tomcat 6 Web容器.)您可能会问自己为什么这是一个问题 - 确定不知道 - 但事实是我遇到了编译错误:

/W:/.../parser/v0.5/AssignELParser.java:6:包com.xxx.yyy.zzz.configuration不存在

下面是一些关于互联网的例子,我定义了以下类:

class MemoryClassLoader extends ChainedAction {

    private static final Logger LOG = Logger.getLogger(MemoryClassLoader.class);

    private LoaderImpl impl;

    private class LoaderImpl extends ClassLoader {

        // The compiler tool
        private final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

        // Compiler options
        private final Iterable<String> options = Arrays.asList("-verbose");

        // DiagnosticCollector, for collecting compilation problems
        private final DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();

        // Our FileManager
        private final MemoryFileManager manager = …
Run Code Online (Sandbox Code Playgroud)

java compiler-construction code-generation runtime classloader

6
推荐指数
1
解决办法
2216
查看次数