Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Сборка Java + AspectJ с помощью Ant

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Описание ситуации:

Есть main

public static void main(String[] args) {
		System.out.println("");
		System.out.println("Hello, Chiz!!!");
		System.out.println("");

Worker w1 = new Worker(1, "Vasya", 23, false);
		w1.DoWork();
		Worker w2 = new Worker(2, "Petya", 25, false);
		w2.DoWork();

Boss b1 = new Boss(3, "Afonasii", 33, true);

b1.set_arrWorkers(new Worker[] { w1, w2 });

System.out.println("");
		System.out.println("Goodbye, Chiz!!!");
		System.out.println("");
	}

Босс с работнечегом отнаследованны от простого смертного пользователя. У всех есть пустой конструктор.

Есть класс Аспекта:

public class AspectTest {

@After("execution(test.user.* .new(..))")
	public void doSysOutAfterP(JoinPoint thisJoinPoint) {
		System.out.println("---------------------");
		System.out.println("------- After -------");
		System.out.println("[" + thisJoinPoint.getTarget().getClass().toString() + "]");
		System.out.println("---------------------");
	}
}

Этот проект пишится мной в Eclipse. там же он собирается и прекрасно работает.

Но, как все адекватные программисты понимают, это тестовый пример. Суть этого теста — самый простой работающий аспект.

А теперь надо этот же проект собрать антом, т.к. тот проект, для которого изучается эта технология, собирается антом.

Вот тут и появилась проблема.

Описание проблемы:

Проект собирается Ant, но при выполнении приложения валит ошибку в том месте, где должен работать аспект.

Что было дальше? Дальше я переписал аспект на такую форму:

/**
 *
 */
package aspects;

/**
 * @author Chiz
 *
 */
public aspect AspectTest2 {

pointcut greeting() : execution(String DoWork(..)) && !within(AspectTest2);

before() : greeting() {
        System.out.println("... before! ...");
    }
    after() : greeting() {
        System.out.println("... after! ...");
    }
}

Это было сделано для того, чтобы убрать аспект из конструктора и поменять стиль написания аспектов (сравните первцый аспект и второй). Но это не помогло — таже ошибка в том же месте — при вызове аспекта (метод, описанный в файле аспекта).

При любом раскладе в Eclipse всё работает как часы.

В Ant скрипте прописывались classpath и в глобальных все jar для AspectJ прописывались.

Кто работал с AspectJ + Ant, поделитесь опытом, пожалуйста.

Заранее благодарен.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Теперь напишу для тех, у кого что-нить случится со сборкой java + aspectj.
Проблема была в том, что переменные были объявленны как классы (Integer, Boolean), а я в такие переменные пытался записать значения типа 10, true.
Компилятор аспектов не понимает этого. Ему надо либо new Integer (10) либо переменная типа int.
Либо в тэге ajc указать опцию source= «1.5».

После этого заработает.


Заработало.
Сейчас начну пробовать свой пример.

Спасибо большое, ss__v.

Незачто:)

Заработало.
Сейчас начну пробовать свой пример.

Спасибо большое, ss__v.

Примеры работают просто копилить и запускать их нада антом который там имееться воттак

C: \aspectj1.6\doc\examples> ant

Или идентично примеру из руководства:

C:\aspectj1.6\doc\examples>java -classpath ".;C:/aspectj1.6/lib/aspectjrt.jar" t
elecom.billingSimulation
Exception in thread "main" java.lang.NoClassDefFoundError: telecom/billingSimula
tion (wrong name: telecom/BillingSimulation)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: telecom.billingSimulation.  Program will exit.


А текст ошибки? Стектрейс?

C:\aspectj1.6\doc\examples>java telecom/basicsimulation
Exception in thread "main" java.lang.NoClassDefFoundError: telecom/basicsimulati
on
Caused by: java.lang.ClassNotFoundException: telecom.basicsimulation
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: telecom/basicsimulation.  Program will exit.


В документации есть примеры все они компиляться и запускаються антовским скриптом попробуй взять его за остнову для своего.

Не работают у меня примеры: — (

А текст ошибки? Стектрейс?

В документации есть примеры все они компиляться и запускаються антовским скриптом попробуй взять его за остнову для своего.

Підписатись на коментарі