Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
Артём Кошелев: Прочная основа для автоматизации тестированияYandex
Каждый раз, начиная проект по автоматизации тестирования, вы делаете выбор. Вы выбираете технологии, инструменты, подходы к разработке и поддержке тестов. Я расскажу о том, какой выбор сделали мы и что из этого получилось.
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
A Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process in a fail-safe fashion.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes in runtime, record execution flow, etc.
The presentation provides an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
This document discusses continuous delivery and creating a continuous delivery pipeline. It introduces concepts like using Jenkins for continuous integration, Artifactory for artifact storage, and LiveRebel for deployment management. The document outlines building a pipeline with phases for building, testing, QA, and production. It explains how continuous delivery changes traditional processes by increasing automated testing, reducing manual work, and removing infrastructure teams from releases so they are driven by business decisions and automation.
Артём Кошелев: Прочная основа для автоматизации тестированияYandex
Каждый раз, начиная проект по автоматизации тестирования, вы делаете выбор. Вы выбираете технологии, инструменты, подходы к разработке и поддержке тестов. Я расскажу о том, какой выбор сделали мы и что из этого получилось.
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
A Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process in a fail-safe fashion.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes in runtime, record execution flow, etc.
The presentation provides an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
This document discusses continuous delivery and creating a continuous delivery pipeline. It introduces concepts like using Jenkins for continuous integration, Artifactory for artifact storage, and LiveRebel for deployment management. The document outlines building a pipeline with phases for building, testing, QA, and production. It explains how continuous delivery changes traditional processes by increasing automated testing, reducing manual work, and removing infrastructure teams from releases so they are driven by business decisions and automation.
Con-FESS 2015 - Is your profiler speaking to you?Anton Arhipov
The document discusses various techniques for profiling Java applications, including sampling, tracing, and busy loops. It notes that profiling is needed to optimize performance, but that some profiling techniques can introduce overhead that shifts the balance. The key areas to focus on optimizing first are the application's own building blocks like database and web service access.
Improve your Developer Experiece using the WAS Liberty Profile with JRebel Anton Arhipov
This document provides an overview of the WAS Liberty Profile and how it can improve the developer experience when used with JRebel. The Liberty Profile is a lightweight Java EE server profile that offers fast start up times, small footprint, and dynamic updates without restarts. JRebel further improves developer productivity by allowing code and configuration changes without rebuilds and redeploys. Together, the Liberty Profile and JRebel aim to significantly reduce development turnaround times for Java EE applications.
This document discusses integrating the JRebel plugin with NetBeans by patching NetBeans platform classes at load time. Specifically, it covers adding buttons, menus, and options to NetBeans, integrating with the NetBeans debugger and server adaptors, and programmatically patching NetBeans classes using Javassist to inject JRebel JVM arguments into the server launch process.
Con-FESS 2015 - Having Fun With JavassistAnton Arhipov
This document discusses using Javassist, a bytecode manipulation library, for tasks like adding logging to existing code without modifying the source code. It provides examples of using Javassist to inject logging into a method and creating a Java agent to manipulate bytecode. The document also summarizes how Javassist works under the hood to modify class files and how frameworks like JRebel use it to reload configurations without restarts.
JavaOne 2015 - Having fun with JavassistAnton Arhipov
The document provides examples of using Javassist, an open-source bytecode engineering library, to dynamically generate, instrument, reflect and modify Java bytecode. It demonstrates how to use Javassist to generate proxy classes, insert logging before methods, and modify existing classes at runtime without recompilation. Key classes and methods discussed include ClassPool, CtClass, CtMethod and insertBefore.
This document provides a summary of the history and features of the Groovy programming language. It discusses how Groovy evolved from earlier dynamic scripting languages for Java like BeanShell and Rhino. Key points include:
- Groovy was created in 2003 by James Strachan as a new dynamic language for the Java platform.
- Groovy adds dynamic and static typing, closures, builders, metaprogramming and other features to make Java development more productive.
- Groovy scripts can omit elements like semicolons and parentheses and do not require defining a class or main method. This makes Groovy code more concise and readable.
Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes at runtime, record execution flow, etc.
I’d like to give an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
Jenkins is used to automate testing for software projects, including continuous integration and continuous delivery. Over time, the number of tests and configurations grew substantially, creating challenges around speed and scaling. Solutions involved leveraging Jenkins plugins for capabilities like matrix configurations, cloud integration, and elasticity. This allowed parallelizing tests across different environments and machines. DVCS also helped with faster feedback by automatically triggering downstream tests upon code changes.
Riga Dev Day 2016 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, an open-source bytecode engineering library, for bytecode instrumentation and generation of Java proxies. It provides examples of using Javassist's ClassPool and CtClass APIs to dynamically generate and modify classes, such as adding a print statement before a method or generating a class from metadata. The key uses of Javassist mentioned are generating proxies, bytecode instrumentation, and dynamic class generation.
Understanding Date Handling and Collection Frameworkashishspace
The document discusses Java's date and time related classes, the Collection Framework, and key classes like Vector, ArrayList, Date, Calendar, and GregorianCalendar. It provides examples of creating and manipulating objects from these classes, and describes methods like add, get, size, iterator, and more. It also summarizes the core interfaces in the Collection Framework like Set, List, and Map.
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
Сергей Комлач
Занимается разработкой под мобильные платформы более 8-ми лет. Последние 2 года занимает должность старшего Android разработчика. Ведет курс разработки по Android в рамках Google Android Study . Докладчик на UAMobile 2014 (Kiev) , Lviv Mobile Developers Day 2014 , Google Developers Fest (2014, Lviv) , MobileOptimized (Minsk). Соорганизатор GDG Kremenchuk .
Продвинутое использование Celery — Александр КошелевYandex
Доклад будет интересен как тем, кто уже знаком с библиотекой для реализации очередей задач Celery, так и тем, кто только собирается её попробовать. Основные темы выступления:
- как устроена Celery;
- как перейти на альтернативные брокеры;
- как обеспечить эффективный доступ к ресурсам;
- как отслеживать работоспособность процессов Celery
Построение собственного JS SDK — зачем и как?buranLcme
Многие разработчики любят делать свои велосипеды, но не все задумываются зачем. Мы расскажем о том, зачем вам может понадобится собственный JavaScript SDK и полезно ли кататься на велосипедах.
Мы делали собственный JS SDK для того, чтобы дать возможность создания плагинов в рамках большой enterprise системы - <b>Parallels Automation</b> и <b>Plesk Panel</b>. Сам SDK является частью общего стандарта <b>APS</b>, который является шиной, объединяющей все наши продукты по автоматизации. Обе панели брендируются и мы должны были сохранить брендинг при уже существующей кодовой базе верстки и существующих правилах оформления. И главное - надо было дать возможность создания UI сторонним девелоперам, которые могут иметь абсолютно разный уровень - от пришедших бекэндеров до профессиональных js-разработчиков.
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
Рассказ о Configuration as Code в Jenkins и возможностях Pipeline: DSL, Multi-Branch, Pipeline Model Definition, восстановление после ошибок, параллелизация задач, интеграции. В каком направлении развивается экосистема?
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
Есть ошибки, которые легко прячутся от программистов на обзорах кода. Чаще всего они связаны с опечатками или недостаточным знанием тонких нюансах языка/библиотеки. Давайте посмотрим интересные примеры таких ошибок и как их можно выявить с помощью статического анализа. При этом анализаторы не конкурируют с обзорами кода или, например, юнит-тестами. Они отлично дополняют другие методологии борьбы с ошибками.
Получасовая презентация по Java 9. Конечно, рассказать можно много больше, да и часть выводов прозизносил вслух, но в любом случае, если интересна Java 9, то изучение можно начать со ссылок в конце презентации.
Критика, предложения приветствуются.
The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
This talk about how android developers can use sun.misc.Unsafe for boost their app speed with direct access to sandbox memory and to understand how android allocates memory and works with serialization, concurrency and reflection.
использование Hibernate java persistence.part 1.Asya Dudnik
Излагаются основы Hibernate и приводится пример его применения в Java-коде.
Hibernate значительно уменьшает время разработки приложений, работающих с базами данных, заботится о связи Java классов с таблицами базы данных (и типов данных Java в типы данных SQL), предоставляет средства для автоматического построения запросов и извлечения данных.
Использование javax.persistence аннотаций, позволяет встроить маппинг сущностей используемой системы хранения (в данном случае hibernate) непосредственно в программый код. Это снижает вероятность появления ошибок и теперь не требуется создавать десятки XML файлов маппинга объектов.
Основные новшества Java 9, которые, на мой взгляд, наиболее актуальны.
Здоровая критика и дополнения приветствуются. Есть текстовый документ, где всё это расписано немного подробнее.
JavaScript-модули "из прошлого в будущее"oelifantiev
Доклад на первом Ярославском форнтэнд-митапе.
Рассказ об имеющихся методиках описания модулей в JavaScript а также о грядущем стандарте ES6 и, наконец-то, нативной поддержке модулей языком.
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
JavaZone 2022 - Building Kotlin DSL.pdfAnton Arhipov
The document discusses Kotlin DSL and provides examples of using Kotlin as a domain specific language. It demonstrates how to build type-safe builders using Kotlin, including defining DSL blocks, extension functions and properties, infix notation, lambda receivers, and context receivers to define internal and external DSLs. Code samples are provided of building clients and dates using DSL syntax and context requirements.
The document discusses idiomatic Kotlin programming. It covers several topics including:
- Using expressions idiomatically in Kotlin like if/when expressions
- Examples of idiomatic patterns from the Kotlin standard library
- Best practices for null safety using safe calls, let, elvis operator
- Idiomatic use of classes, functions, and data classes
- Leveraging the Kotlin standard library
TeamCity is a great tool for Continuous Integration with a lot of advanced features provided out-of-the-box. In this session, we will go through how TeamCity helps the software development with the daily routine; what was added to the product in the latest releases; and what features are coming next.
You will learn why build pipelines are useful, and how the CI server can be optimized when properly configured. I will also demonstrate how to configure the builds using the special Kotlin DSL provided with TeamCity.
TeamCity is a build management and continuous integration tool created by JetBrains that allows building pipelines of steps. It supports over 2000 projects with 12,000 build configurations running on 500 agents. Key features include a Kotlin DSL, HA read-only servers, Docker runner improvements, templates for step ordering, enforced settings, .NET Core support, and plugins. Pipelines allow breaking up builds into sequential steps like compiling, running tests, and publishing results to improve efficiency.
Devoxx Ukraine 2018 - Kotlin DSL in under an hourAnton Arhipov
Kotlin DSLLearn how to create type-safe and statically typed DSLs in Kotlin. Uncover the language features that make DSL creation possible. We’ll take a look at a few practical examples and create a simple DSL ourselves.
Build pipelines with TeamCity and Kotlin DSLAnton Arhipov
- TeamCity allows building software projects and managing build pipelines for continuous integration and delivery (CI/CD)
- A build pipeline in TeamCity refers to the sequence of build steps such as compiling code, running tests, and deploying artifacts that are automatically triggered by code changes
- The document demonstrates how to define a build pipeline in TeamCity using Kotlin DSL that compiles and packages a Java application project and its dependency library project
A build pipeline refers to the automated process of building software by breaking it down into discrete steps. This document discusses how TeamCity, a build management and continuous integration tool, can be used to create build pipelines. It provides an example pipeline with steps for checking out sources, compiling code, running tests at different stages, generating reports, and publishing results. The benefits of a pipeline include running different test types in parallel and tracking dependencies between steps to speed up the overall build process.
JavaDay Kiev 2017 - Integration testing with TestContainersAnton Arhipov
This document introduces TestContainers, an open source Java library that supports integration testing for applications that depend on external resources like databases. It allows tests to use real Docker containers to manage these dependent services. Tests run quickly and are portable across environments because the containers are started and stopped for each test. The document provides examples of using TestContainers with Spring Boot tests to launch containers for PostgreSQL and Redis, and to configure a MockServer container to handle external API dependencies. It suggests TestContainers is useful for testing microservices and Java agents that depend on external services or APIs.
TestContainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses different techniques for reloading Java classes at runtime:
- HotSwap allows reloading individual statements but is limited. Class loaders allow reloading entire classes but each class loader isolates its classes.
- More advanced techniques like Java agents and bytecode instrumentation allow redefining classes in-place and reloading methods, fields, and class hierarchies in a binary-compatible way.
- Demonstrations show reloading an entire "region" of related classes like a service class and its dependencies, allowing a live application thread to see the changes immediately without restarts. Java agents in particular provide a powerful but complex way to implement class reloading.
JavaOne 2017 - TestContainers: integration testing without the hassleAnton Arhipov
This document introduces TestContainers, an open source tool for running Docker containers as part of integration tests. It discusses why integration testing is important for reproducibility, isolation, and realism. TestContainers allows setting up Docker containers programmatically and automatically cleaning them up after tests complete. It supports starting individual containers, Docker Compose environments, and custom container types. Examples are given for testing services that depend on databases, caches, and external APIs using TestContainers without complex test environment configuration. The document also describes how to use TestContainers to test Java agents by modifying bytecode at runtime within a container during tests.
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
In Java, a typical workflow involves restarting the application with (almost) every class change. For some applications, it is not a problem at all; for others, it is a disaster, from HotSwap to agent-based reloading. This session takes a look at the options available for Java class reloading. There are plenty of tools you can use for this task: rely on standard JVM HotSwap, redesign your application to rely on dynamic class loaders, comprehend the Zen of OSGi, or integrate a reloading agent. Every option has its own drawbacks and benefits, and the presentation takes a deep dive into the subject. Come get a better understanding of class reloading technologies and become a more productive Java developer.
JavaZone 2017 - The Hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses techniques for reloading Java classes at runtime, including using class loaders to load updated classes, Java agents to instrument classes, and frameworks like HotSwap that utilize these techniques. It provides examples of how class loaders can be used to reload specific parts of an application while a program is running. The goal is to achieve hot reloading that is binary compatible and allows updating code without restarting the Java virtual machine.
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses techniques for reloading Java classes at runtime, known as hot reloading or hot swapping. It begins with an introduction and overview of class loaders, Java agents, and instrumentation which can be used to dynamically modify classes. Specific techniques are then presented for reloading classes, fields, methods and code using custom class loaders and bytecode manipulation. The goal is to allow reloading parts of an application without restarting the Java Virtual Machine.
GeeCON 2017 - TestContainers. Integration testing without the hassleAnton Arhipov
TestContainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
JEEConf 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
In Java, a typical workflow involves restarting the application (almost) with every class change. For some applications it is not a problem at all, for some – it is a disaster.
From HotSwap to agent-based reloading. In this session, we are going to take a look at the options available for Java class reloading. There is plenty of tools that you can use for this task: rely on standard JVM HotSwap, redesign your application to rely on dynamic class loaders, to comprehend the Zen of OSGi, or to integrate a reloading agent. Every option has its own drawbacks and benefits and we’re going to take a deep dive on the subject.
Finally, there are also the conceptual challenges in reloading Java classes. What to do with the state? What should happen with the static initialisers? What if super class changes? Join this session to gain a better understanding of class reloading technologies and become more productive Java developer.
JEEConf 2017 - Having fun with JavassistAnton Arhipov
Javassist makes Java bytecode manipulation simple. At ZeroTurnaround we use Javassist a lot to implement the integrations for our tools.
In this talk we will go through the examples of how Javassist can be applied to alter the applications behavior and do all kind of fun stuff with it.
Why is it interesting? Because while trying to do unusual things in Java, you learn much more about the language and the platform itself and learning about Javassist will actually make you a better Java developer!
3. Что
бы
сделать
JRebel,
нам
потребовалось
…
Внедриться
в
процесс
загрузки
классов
4. Потребовалось
…
проинтегрировать
решение
со
всевозможными*
серверами
приложений
(JBoss,
Glassfish,
итд)
*
-‐
На
данный
момент
в
тестовой
среде
установлено
60
разных
версий
серверов
5. и
…
решить
100500
проблем
связанных
с
загрузчиками
классов
7. Полезное
чтиво
• Vijay
Saraswat,
Java
is
not
type-‐
safe,
1997
• Sheng
Liang
and
Gilad
Bracha,
Dynamic
Class
Loading
in
the
Java
Virtual
Machine
in
Proc.
of
the
ACM
Conf.
on
Object-‐Oriented
Programming,
Systems,
Languages
and
Applicaqons,
October
1998.
8. План
захвата
галактики
Основы
загрузки
классов
Коллекция
граблей
Как
загрузчики
«утекают»
10. public abstract class ClassLoader {
public Class loadClass(String name)
protected Class defineClass(byte[] b)
public URL getResource(String name)
public Enumeration getResources(String name)
public ClassLoader getParent()
}
11. public class A {
public void doSmth() {
B b = new B();
b.doSmthElse();
}
}
Эквивалентно
A.class.getClassLoader().loadClass(“B”);
12. Модель
делегирования
У
каждого
загрузчика
есть
загрузчик-‐«родитель»
Загрузчик
1
Загрузчик
2
13. Модель
делегирования
«родитель»
обычно
опрашивается
первым
позволяет
избежать
излишней
загрузки
классов
Загрузчик
1
Загрузчик
2
МойКласс.class
21. Класс
не
найден
• Разновидности:
ClassNotFoundExcepqon
NoClassDefFoundError
• В
помощь:
Поиск
в
IDE
(Ctrl+Shi•+T
/
Ctrl
+
N)
find
*.jar
-‐exec
jar
-‐A
'{}'
;
|
grep
MyClass
URLClassLoader.getUrls()
Логи!
22. Найден,
но
не
тот
• Варианты:
IncompaqbleClassChangeError
AbstractMethodError
NoSuch(Method|Field)FoundError
ClassCastExcepqon,
IllegalAccessError
• В
помощь:
-‐verbose:class
ClassLoader.getResource()
javap
-‐private
MyClass
23. Найдено
более
одного
• Варианты:
LinkageError
(loader
constraint
violaqon)
ClassCastExcepqon,
IllegalAccessError
• В
помощь
-‐verbose:class
ClassLoader.getResource()
24. Найдено
более
одного
Util3 u = (Util3) Factory3.instanceUntyped();
Factory3.instanceUntyped();
new Util3()